commit d3d65603acedd4900e9f9d399ee0be989ff5badb Author: lwh <2679599887@qq.com> Date: Tue Apr 4 18:15:13 2023 +0800 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5d947ca --- /dev/null +++ b/.gitignore @@ -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. diff --git a/ARW-net/.gitattributes b/ARW-net/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/ARW-net/.gitattributes @@ -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 diff --git a/ARW-net/.gitignore b/ARW-net/.gitignore new file mode 100644 index 0000000..91c5d32 --- /dev/null +++ b/ARW-net/.gitignore @@ -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 diff --git a/ARW-net/.net_run.bat b/ARW-net/.net_run.bat new file mode 100644 index 0000000..bfd85fe --- /dev/null +++ b/ARW-net/.net_run.bat @@ -0,0 +1,10 @@ +"age": 10, +"classId": "1547502470350114800", +"className": "1班", +"sex": "1", +"studentDescribe": "

啊实打实大苏打实打实实打实上的

", +"studentId": 1548629251954184200, +"studentImg": "/url", +"studentName": "张思1", +"studentService": [{service_name: "特殊服务", service_price: "999"}], +"studentTag": "a,v,c" \ No newline at end of file diff --git a/ARW-net/ARW.CodeGenerator/ARW.CodeGenerator.csproj b/ARW-net/ARW.CodeGenerator/ARW.CodeGenerator.csproj new file mode 100644 index 0000000..2651b87 --- /dev/null +++ b/ARW-net/ARW.CodeGenerator/ARW.CodeGenerator.csproj @@ -0,0 +1,19 @@ + + + + net6.0 + ARW.CodeGenerator + ARW.CodeGenerator + + + + + + + + + + + + + diff --git a/ARW-net/ARW.CodeGenerator/CodeGenerateOption.cs b/ARW-net/ARW.CodeGenerator/CodeGenerateOption.cs new file mode 100644 index 0000000..b7f4e3f --- /dev/null +++ b/ARW-net/ARW.CodeGenerator/CodeGenerateOption.cs @@ -0,0 +1,52 @@ +namespace ARW.CodeGenerator +{ + public class CodeGenerateOption + { + /// + /// 项目命名空间 + /// + public string BaseNamespace { get; set; } + /// + /// 下级命名空间 + /// + public string SubNamespace { get; set; } + /// + /// 数据实体命名空间 + /// + public string ModelsNamespace { get; set; } + /// + /// 输入输出数据实体名称空间 + /// + public string DtosNamespace { get; set; } + /// + /// 仓储接口命名空间 + /// + public string IRepositoriesNamespace { get; set; } + /// + /// 仓储实现名称空间 + /// + public string RepositoriesNamespace { get; set; } + /// + /// 服务接口命名空间 + /// + public string IServicsNamespace { get; set; } + /// + /// 服务接口实现命名空间 + /// + public string ServicesNamespace { get; set; } + + /// + /// Api控制器命名空间 + /// + public string ApiControllerNamespace { get; set; } + + /// + /// 去掉的表头字符 + /// + public string ReplaceTableNameStr { get; set; } + /// + /// 要生数据的表,用“,”分割 + /// + //public string TableList { get; set; } + } +} diff --git a/ARW-net/ARW.CodeGenerator/CodeGenerateTemplate.cs b/ARW-net/ARW.CodeGenerator/CodeGenerateTemplate.cs new file mode 100644 index 0000000..e98f333 --- /dev/null +++ b/ARW-net/ARW.CodeGenerator/CodeGenerateTemplate.cs @@ -0,0 +1,48 @@ +using System; +using System.Linq; +using System.Text; +using ARW.Model.System.Generate; + +namespace ARW.CodeGenerator +{ + /// + /// 代码生成模板 + /// + 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})"; + } + + } +} diff --git a/ARW-net/ARW.CodeGenerator/CodeGeneratorTool.cs b/ARW-net/ARW.CodeGenerator/CodeGeneratorTool.cs new file mode 100644 index 0000000..77bb8f3 --- /dev/null +++ b/ARW-net/ARW.CodeGenerator/CodeGeneratorTool.cs @@ -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 +{ + /// + /// 代码生成器 + /// + /// + public class CodeGeneratorTool + { + /// + /// 代码生成器配置 + /// + private static CodeGenerateOption _option = new CodeGenerateOption(); + + /// + /// 代码生成器入口方法 + /// + /// + 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 读取模板 + + /// + /// 生成实体类Model + /// + /// + /// 替换实体 + 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())); + } + + /// + /// 生成Repository层代码文件 + /// + /// + /// 替换实体 + 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)); + } + + /// + /// 生成Service文件 + /// + 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)); + } + + /// + /// 生成控制器ApiControllers文件 + /// + 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)); + } + + /// + /// 生成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)); + } + + /// + /// vue3 + /// + /// + /// + 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)); + } + /// + /// 生成vue页面api + /// + /// + /// + /// + 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)); + + } + + /// + /// 生成SQL + /// + /// + /// + 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)); + } + + /// + /// 生成vue页面查询form + /// + /// + public static string GenerateVueQueryForm() + { + var tpl = FileHelper.ReadJtTemplate("QueryForm.txt"); + var result = tpl.Render(); + return result; + } + /// + /// 生成vue页面table + /// + /// + public static string GenerateVueTableList() + { + var tpl = FileHelper.ReadJtTemplate("TableList.txt"); + var result = tpl.Render(); + + return result; + } + /// + /// 生成vue表单 + /// + /// + public static string GenerateCurdForm() + { + var tpl = FileHelper.ReadJtTemplate("CurdForm.txt"); + var result = tpl.Render(); + return result; + } + #endregion + + #region 帮助方法 + + /// + /// 如果有前缀替换将前缀替换成空,替换下划线"_"为空再将首字母大写 + /// 表名转换成C#类名 + /// + /// + /// + public static string GetClassName(string tableName) + { + bool autoRemovePre = AppSettings.GetAppConfig(GenConstants.Gen_autoPre, false); + string tablePrefix = AppSettings.GetAppConfig(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(); + } + + /// + /// 获取前端标签名 + /// + /// + /// + /// + public static string GetLabelName(string columnDescription, string columnName) + { + return string.IsNullOrEmpty(columnDescription) ? columnName : columnDescription; + } + + /// + /// 首字母转小写,模板使用(勿删) + /// + /// + /// + 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 ""; + } + } + + /// + /// 获取C# 类型 + /// + /// + /// + 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 初始化信息 + + /// + /// 初始化表信息 + /// + /// + /// + /// + /// + /// + 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; + } + + /// + /// 初始化列属性字段数据 + /// + /// + /// + public static List InitGenTableColumn(GenTable genTable, List dbColumnInfos) + { + List genTableColumns = new(); + foreach (var column in dbColumnInfos) + { + genTableColumns.Add(InitColumnField(genTable, column)); + } + return genTableColumns; + } + + /// + /// 初始化表字段数据 + /// + /// + /// + /// + 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 + + /// + /// 初始化Jnt模板 + /// + /// + /// + 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 模板用 + /// + /// 模板用 + /// + /// + /// + 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 + } +} diff --git a/ARW-net/ARW.CodeGenerator/DbProvider.cs b/ARW-net/ARW.CodeGenerator/DbProvider.cs new file mode 100644 index 0000000..2ebf84a --- /dev/null +++ b/ARW-net/ARW.CodeGenerator/DbProvider.cs @@ -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 +{ + /// + /// 代码生成数据库连接 + /// + public class DbProvider + { + protected static SqlSugarClient CodeDb; + + /// + /// 获取动态连接字符串 + /// + /// 数据库名 + /// + 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() + { + new ConnectionConfig(){ + ConnectionString = connStr, + DbType = (DbType)dbType, + IsAutoCloseConnection = true,//开启自动释放模式和EF原理一样 + InitKeyType = InitKeyType.Attribute,//从特性读取主键和自增列信息 + }, + }); + + CodeDb = db; + return db; + } + + /// + /// 获得字符串中开始和结束字符串中间得值 + /// + /// 字符串 + /// 开始 + /// 结束 + /// + 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; + } + } +} diff --git a/ARW-net/ARW.CodeGenerator/FileHelper.cs b/ARW-net/ARW.CodeGenerator/FileHelper.cs new file mode 100644 index 0000000..d6ca974 --- /dev/null +++ b/ARW-net/ARW.CodeGenerator/FileHelper.cs @@ -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 + { + /// + /// 创建文件夹 + /// + /// + /// + 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; + } + + /// + /// 写文件 + /// + /// 完整路径带扩展名的 + /// + 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); + } + } + + + /// + /// 从代码模板中读取内容 + /// + /// 模板名称,应包括文件扩展名称。比如:template.txt + /// + 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; + } + + /// + /// 压缩代码 + /// + /// + /// + /// 压缩后的文件名 + /// + 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; + } + } + + /// + /// 删除指定目录下的所有文件及文件夹(保留目录) + /// + /// 文件目录 + 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); + } + } + + } +} diff --git a/ARW-net/ARW.CodeGenerator/GenConstants.cs b/ARW-net/ARW.CodeGenerator/GenConstants.cs new file mode 100644 index 0000000..45e7b27 --- /dev/null +++ b/ARW-net/ARW.CodeGenerator/GenConstants.cs @@ -0,0 +1,144 @@ + + +namespace ARW.CodeGenerator +{ + /// + /// 代码生成常量 + /// + 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"; + + /// + /// InputDto输入实体是不包含字段 + /// + public static readonly string[] inputDtoNoField = new string[] { "createTime", "updateTime", "addtime", "create_time", "update_time" }; + /// + /// 图片字段 + /// + public static readonly string[] imageFiled = new string[] { "icon", "img", "image", "url", "pic", "photo", "avatar" }; + /// + /// 下拉框字段 + /// + public static readonly string[] selectFiled = new string[] { "status", "type", "state", "sex", "gender" }; + /// + /// 单选按钮字段 + /// + 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"; + /// + /// 自定义输入框 + /// + 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"; + } +} \ No newline at end of file diff --git a/ARW-net/ARW.CodeGenerator/Model/GenerateDto.cs b/ARW-net/ARW.CodeGenerator/Model/GenerateDto.cs new file mode 100644 index 0000000..029f8e7 --- /dev/null +++ b/ARW-net/ARW.CodeGenerator/Model/GenerateDto.cs @@ -0,0 +1,71 @@ +using System.Collections.Generic; +using ARW.Model.System.Generate; + +namespace ARW.CodeGenerator.Model +{ + public class GenerateDto + { + /// + /// vue版本 + /// + public int VueVersion { get; set; } + public long TableId { get; set; } + /// + /// 是否预览代码 + /// + public bool IsPreview { get; set; } + /// + /// 生成代码的数据库类型 0、mysql 1、sqlserver + /// + public int DbType { get; set; } + /// + /// 生成的按钮功能 + /// + public int[] CheckedBtn { get; set; } = System.Array.Empty(); + public GenTable GenTable { get; set; } + public CodeGenerateOption GenOptions { get; set; } + #region 存储路径 + /// + /// 代码模板预览存储路径存放 + /// + public List GenCodes { get; set; } = new List(); + /// + /// 代码生成路径 + /// + public string GenCodePath { get; set; } = string.Empty; + /// + /// 代码生成压缩包路径 + /// + public string ZipPath { get; set; } + /// + /// 代码生成压缩包名称 + /// + public string ZipFileName { get; set; } + /// + /// 生成代码方式(0zip压缩包 1自定义路径) + /// + public string GenType { get; set; } + public string GenPath { get; set; } = ""; + /// + /// vue代码路径 + /// + 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; + } + } +} diff --git a/ARW-net/ARW.CodeGenerator/Model/ReplaceDto.cs b/ARW-net/ARW.CodeGenerator/Model/ReplaceDto.cs new file mode 100644 index 0000000..b391a7b --- /dev/null +++ b/ARW-net/ARW.CodeGenerator/Model/ReplaceDto.cs @@ -0,0 +1,59 @@ +using System; + +namespace ARW.CodeGenerator.Model +{ + public class ReplaceDto + { + /// + /// 主键字段 + /// + public string PKName { get; set; } + /// + /// 首字母小写主键 + /// + public string FistLowerPk{ get; set; } + /// + /// 主键类型 + /// + public string PKType { get; set; } + /// + /// 控制器权限 + /// + public string PermissionPrefix { get; set; } + /// + /// C#类名 + /// + public string ModelTypeName { get; set; } + //vue、api + //public string VueViewFormResetHtml { get; set; } + /// + /// 前端列表查询html + /// + public string VueViewListHtml { get; set; } + /// + /// 前端添加、编辑表格html + /// + public string VueViewFormHtml { get; set; } + /// + /// 前端搜索表单html + /// + public string VueQueryFormHtml { get; set; } + + /// + /// 查询条件 + /// + 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; } + /// + /// 上传URL data + /// + //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"); + } +} diff --git a/ARW-net/ARW.CodeGenerator/Service/CodeGeneraterService.cs b/ARW-net/ARW.CodeGenerator/Service/CodeGeneraterService.cs new file mode 100644 index 0000000..c820795 --- /dev/null +++ b/ARW-net/ARW.CodeGenerator/Service/CodeGeneraterService.cs @@ -0,0 +1,68 @@ +using SqlSugar; +using System.Collections.Generic; +using System.Linq; +using ARW.Model; + +namespace ARW.CodeGenerator.Service +{ + public class CodeGeneraterService : DbProvider + { + /// + /// 获取所有数据库名 + /// + /// + public List GetAllDataBases() + { + var db = GetSugarDbContext(); + var templist = db.DbMaintenance.GetDataBaseList(db); + + return templist; + } + + /// + /// 获取所有表 + /// + /// + /// + /// + /// + public List 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(); + } + + /// + /// 获取单表数据 + /// + /// + /// + /// + 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; + } + /// + /// 获取列信息 + /// + /// + /// + /// + public List GetColumnInfo(string dbName, string tableName) + { + return GetSugarDbContext(dbName).DbMaintenance.GetColumnInfosByTableName(tableName, true); + } + } +} diff --git a/ARW-net/ARW.Common/ARW.Common.csproj b/ARW-net/ARW.Common/ARW.Common.csproj new file mode 100644 index 0000000..6877bf9 --- /dev/null +++ b/ARW-net/ARW.Common/ARW.Common.csproj @@ -0,0 +1,20 @@ + + + + net6.0 + ARW.Common + ARW.Common + + + + + + + + + + + + + + diff --git a/ARW-net/ARW.Common/AliyunOssHelper.cs b/ARW-net/ARW.Common/AliyunOssHelper.cs new file mode 100644 index 0000000..9d774aa --- /dev/null +++ b/ARW-net/ARW.Common/AliyunOssHelper.cs @@ -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"); + + /// + /// 上传到阿里云 + /// + /// + /// 存储路径 eg: upload/2020/01/01/xxx.png + /// 存储桶 如果为空默认取配置文件 + 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; + } + + /// + /// 删除资源 + /// + /// + /// + /// + 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; + } + } +} diff --git a/ARW-net/ARW.Common/Cache/CacheHelper.cs b/ARW-net/ARW.Common/Cache/CacheHelper.cs new file mode 100644 index 0000000..8efe630 --- /dev/null +++ b/ARW-net/ARW.Common/Cache/CacheHelper.cs @@ -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 + }); + } + + /// + /// 获取缓存 + /// + /// + /// + /// + public static T GetCache(string key) where T : class + { + if (key == null) + throw new ArgumentNullException(nameof(key)); + //return Cache.Get(key) as T; //或者 + return Cache.Get(key); + } + + /// + /// 获取缓存 + /// + /// + /// + public static object GetCache(string CacheKey) + { + return Cache.Get(CacheKey); + } + + public static object Get(string CacheKey) + { + return Cache.Get(CacheKey); + } + + /// + /// 设置缓存,永久缓存 + /// + /// key + /// 值 + public static object SetCache(string CacheKey, object objObject) + { + return Cache.Set(CacheKey, objObject); + } + + /// + /// 设置缓存 + /// + /// key + /// 值 + /// 过期时间(分钟) + public static object SetCache(string CacheKey, object objObject, int Timeout) + { + return Cache.Set(CacheKey, objObject, DateTime.Now.AddMinutes(Timeout)); + } + + /// + /// 设置缓存(秒) + /// + /// key + /// 值 + /// 过期时间(秒) + public static void SetCaches(string CacheKey, object objObject, int Timeout) + { + Cache.Set(CacheKey, objObject, DateTime.Now.AddSeconds(Timeout)); + } + + /// + /// 设置缓存 + /// + /// key + /// 值 + /// 过期时间 + /// 过期时间间隔 + public static object SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration) + { + return Cache.Set(CacheKey, objObject, absoluteExpiration); + } + + /// + /// 设定绝对的过期时间 + /// + /// + /// + /// 超过多少秒后过期 + public static void SetCacheDateTime(string CacheKey, object objObject, long Seconds) + { + Cache.Set(CacheKey, objObject, DateTime.Now.AddSeconds(Seconds)); + } + + /// + /// 删除缓存 + /// + /// key + public static void Remove(string key) + { + Cache.Remove(key); + } + } +} + diff --git a/ARW-net/ARW.Common/Cache/RedisServer.cs b/ARW-net/ARW.Common/Cache/RedisServer.cs new file mode 100644 index 0000000..ce58b10 --- /dev/null +++ b/ARW-net/ARW.Common/Cache/RedisServer.cs @@ -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")); + } + } +} diff --git a/ARW-net/ARW.Common/CrawlerHelper.cs b/ARW-net/ARW.Common/CrawlerHelper.cs new file mode 100644 index 0000000..3d9b33e --- /dev/null +++ b/ARW-net/ARW.Common/CrawlerHelper.cs @@ -0,0 +1,829 @@ +/// +/// 类说明:HttpHelper类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理 +/// 重要提示:请不要自行修改本类,如果因为你自己修改后将无法升级到新版本。如果确实有什么问题请到官方网站提建议, +/// 我们一定会及时修改 +/// 编码日期:2011-09-20 +/// 编 码 人:苏飞 +/// 联系方式:361983679 +/// 官方网址:http://www.sufeinet.com/thread-3-1-1.html +/// 修改日期:2018-11-06 +/// 版 本 号:1.9.9 +/// +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 +{ + /// + /// Http连接操作帮助类 + /// + 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 + + /// + /// 根据相传入的数据,得到相应页面数据 + /// + /// 参数类对象 + /// 返回HttpResult类型 + 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 + + /// + /// 获取数据的并解析的方法 + /// + /// + /// + 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 + } + /// + /// 设置编码 + /// + /// HttpItem + /// HttpResult + /// byte[] + 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), " 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); + } + } + } + } + /// + /// 提取网页Byte + /// + /// + 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 + + /// + /// 为请求准备参数 + /// + ///参数列表 + 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; + } + /// + /// 设置证书 + /// + /// + 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); + } + } + /// + /// 设置多个证书 + /// + /// + private void SetCerList(HttpItem item) + { + if (item.ClentCertificates != null && item.ClentCertificates.Count > 0) + { + foreach (X509Certificate c in item.ClentCertificates) + { + request.ClientCertificates.Add(c); + } + } + } + /// + /// 设置Cookie + /// + /// Http参数 + 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); + } + } + /// + /// 设置Post数据 + /// + /// Http参数 + 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; + } + } + } + /// + /// 设置代理 + /// + /// 参数对象 + 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 + /// + /// 回调验证证书问题 + /// + /// 流对象 + /// 证书 + /// X509Chain + /// SslPolicyErrors + /// bool + private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; } + + /// + /// 通过设置这个属性,可以在发出连接的时候绑定客户端发出连接所使用的IP地址。 + /// + /// + /// + /// + /// + private IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount) + { + return _IPEndPoint;//端口号 + } + #endregion + } + + #region public calss + /// + /// Http请求参考类 + /// + public class HttpItem + { + /// + /// 请求URL必须填写 + /// + public string URL { get; set; } + string _Method = "GET"; + /// + /// 请求方式默认为GET方式,当为POST方式时必须设置Postdata的值 + /// + public string Method + { + get { return _Method; } + set { _Method = value; } + } + int _Timeout = 100000; + /// + /// 默认请求超时时间 + /// + public int Timeout + { + get { return _Timeout; } + set { _Timeout = value; } + } + int _ReadWriteTimeout = 30000; + /// + /// 默认写入Post数据超时间 + /// + public int ReadWriteTimeout + { + get { return _ReadWriteTimeout; } + set { _ReadWriteTimeout = value; } + } + /// + /// 设置Host的标头信息 + /// + public string Host { get; set; } + Boolean _KeepAlive = true; + /// + /// 获取或设置一个值,该值指示是否与 Internet 资源建立持久性连接默认为true。 + /// + public Boolean KeepAlive + { + get { return _KeepAlive; } + set { _KeepAlive = value; } + } + string _Accept = "text/html, application/xhtml+xml, */*"; + /// + /// 请求标头值 默认为text/html, application/xhtml+xml, */* + /// + public string Accept + { + get { return _Accept; } + set { _Accept = value; } + } + string _ContentType = "text/html"; + /// + /// 请求返回类型默认 text/html + /// + 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)"; + /// + /// 客户端访问信息默认Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) + /// + public string UserAgent + { + get { return _UserAgent; } + set { _UserAgent = value; } + } + /// + /// 返回数据编码默认为NUll,可以自动识别,一般为utf-8,gbk,gb2312 + /// + public Encoding Encoding { get; set; } + private PostDataType _PostDataType = PostDataType.String; + /// + /// Post的数据类型 + /// + public PostDataType PostDataType + { + get { return _PostDataType; } + set { _PostDataType = value; } + } + /// + /// Post请求时要发送的字符串Post数据 + /// + public string Postdata { get; set; } + /// + /// Post请求时要发送的Byte类型的Post数据 + /// + public byte[] PostdataByte { get; set; } + /// + /// Cookie对象集合 + /// + public CookieCollection CookieCollection { get; set; } + /// + /// 请求时的Cookie + /// + public string Cookie { get; set; } + /// + /// 来源地址,上次访问地址 + /// + public string Referer { get; set; } + /// + /// 证书绝对路径 + /// + public string CerPath { get; set; } + /// + /// 设置代理对象,不想使用IE默认配置就设置为Null,而且不要设置ProxyIp + /// + public WebProxy WebProxy { get; set; } + private Boolean isToLower = false; + /// + /// 是否设置为全文小写,默认为不转化 + /// + public Boolean IsToLower + { + get { return isToLower; } + set { isToLower = value; } + } + private Boolean allowautoredirect = false; + /// + /// 支持跳转页面,查询结果将是跳转后的页面,默认是不跳转 + /// + public Boolean Allowautoredirect + { + get { return allowautoredirect; } + set { allowautoredirect = value; } + } + private int connectionlimit = 1024; + /// + /// 最大连接数 + /// + public int Connectionlimit + { + get { return connectionlimit; } + set { connectionlimit = value; } + } + /// + /// 代理Proxy 服务器用户名 + /// + public string ProxyUserName { get; set; } + /// + /// 代理 服务器密码 + /// + public string ProxyPwd { get; set; } + /// + /// 代理 服务IP,如果要使用IE代理就设置为ieproxy + /// + public string ProxyIp { get; set; } + private ResultType resulttype = ResultType.String; + /// + /// 设置返回类型String和Byte + /// + public ResultType ResultType + { + get { return resulttype; } + set { resulttype = value; } + } + private WebHeaderCollection header = new WebHeaderCollection(); + /// + /// header对象 + /// + public WebHeaderCollection Header + { + get { return header; } + set { header = value; } + } + /// + // 获取或设置用于请求的 HTTP 版本。返回结果:用于请求的 HTTP 版本。默认为 System.Net.HttpVersion.Version11。 + /// + public Version ProtocolVersion { get; set; } + private Boolean _expect100continue = false; + /// + /// 获取或设置一个 System.Boolean 值,该值确定是否使用 100-Continue 行为。如果 POST 请求需要 100-Continue 响应,则为 true;否则为 false。默认值为 true。 + /// + public Boolean Expect100Continue + { + get { return _expect100continue; } + set { _expect100continue = value; } + } + /// + /// 设置509证书集合 + /// + public X509CertificateCollection ClentCertificates { get; set; } + /// + /// 设置或获取Post参数编码,默认的为Default编码 + /// + public Encoding PostEncoding { get; set; } + private ResultCookieType _ResultCookieType = ResultCookieType.String; + /// + /// Cookie返回类型,默认的是只返回字符串类型 + /// + public ResultCookieType ResultCookieType + { + get { return _ResultCookieType; } + set { _ResultCookieType = value; } + } + private ICredentials _ICredentials = CredentialCache.DefaultCredentials; + /// + /// 获取或设置请求的身份验证信息。 + /// + public ICredentials ICredentials + { + get { return _ICredentials; } + set { _ICredentials = value; } + } + /// + /// 设置请求将跟随的重定向的最大数目 + /// + public int MaximumAutomaticRedirections { get; set; } + private DateTime? _IfModifiedSince = null; + /// + /// 获取和设置IfModifiedSince,默认为当前日期和时间 + /// + public DateTime? IfModifiedSince + { + get { return _IfModifiedSince; } + set { _IfModifiedSince = value; } + } + #region ip-port + private IPEndPoint _IPEndPoint = null; + /// + /// 设置本地的出口ip和端口 + /// ] + /// + ///item.IPEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.1"),80); + /// + public IPEndPoint IPEndPoint + { + get { return _IPEndPoint; } + set { _IPEndPoint = value; } + } + #endregion + + private bool _isReset = false; + /// + /// 是否重置request,response的值,默认不重置,当设置为True时request,response将被设置为Null + /// + public bool IsReset + { + get { return _isReset; } + set { _isReset = value; } + } + } + /// + /// Http返回参数类 + /// + public class HttpResult + { + /// + /// Http请求返回的Cookie + /// + public string Cookie { get; set; } + /// + /// Cookie对象集合 + /// + public CookieCollection CookieCollection { get; set; } + private string _html = string.Empty; + /// + /// 返回的String类型数据 只有ResultType.String时才返回数据,其它情况为空 + /// + public string Html + { + get { return _html; } + set { _html = value; } + } + /// + /// 返回的Byte数组 只有ResultType.Byte时才返回数据,其它情况为空 + /// + public byte[] ResultByte { get; set; } + /// + /// header对象 + /// + public WebHeaderCollection Header { get; set; } + /// + /// 返回状态说明 + /// + public string StatusDescription { get; set; } + /// + /// 返回状态码,默认为OK + /// + public HttpStatusCode StatusCode { get; set; } + /// + /// 最后访问的URl + /// + public string ResponseUri { get; set; } + /// + /// 获取重定向的URl + /// + 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; + } + } + } + /// + /// 返回类型 + /// + public enum ResultType + { + /// + /// 表示只返回字符串 只有Html有数据 + /// + String, + /// + /// 表示返回字符串和字节流 ResultByte和Html都有数据返回 + /// + Byte + } + /// + /// Post的数据格式默认为string + /// + public enum PostDataType + { + /// + /// 字符串类型,这时编码Encoding可不设置 + /// + String, + /// + /// Byte类型,需要设置PostdataByte参数的值编码Encoding可设置为空 + /// + Byte, + /// + /// 传文件,Postdata必须设置为文件的绝对路径,必须设置Encoding的值 + /// + FilePath + } + /// + /// Cookie返回类型 + /// + public enum ResultCookieType + { + /// + /// 只返回字符串类型的Cookie + /// + String, + /// + /// CookieCollection格式的Cookie集合同时也返回String类型的cookie + /// + CookieCollection + } + #endregion +} \ No newline at end of file diff --git a/ARW-net/ARW.Common/ExcelHelper.cs b/ARW-net/ARW.Common/ExcelHelper.cs new file mode 100644 index 0000000..b59d054 --- /dev/null +++ b/ARW-net/ARW.Common/ExcelHelper.cs @@ -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 where T : new() + { + /// + /// 导入数据 + /// + /// + /// + public static IEnumerable 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 resultList = new(); + List propertyInfos = new();// new(typeof(T).GetProperties()); + Dictionary 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()); + break; + case "int16": + p.SetValue(result, cell.GetValue()); break; + case "int32": + p.SetValue(result, cell.GetValue()); break; + case "int64": + p.SetValue(result, cell.GetValue()); break; + case "decimal": + p.SetValue(result, cell.GetValue()); + break; + case "double": + p.SetValue(result, cell.GetValue()); break; + case "datetime": + p.SetValue(result, cell.GetValue()); break; + case "boolean": + p.SetValue(result, cell.GetValue()); break; + case "char": + p.SetValue(result, cell.GetValue()); break; + default: + break; + } + } + catch (KeyNotFoundException ex) + { + Console.WriteLine("未找到该列将继续循环," + ex.Message); + continue; + } + } + resultList.Add(result); + } + + return resultList; + } + + /// + /// 查找Excel列名对应的实体属性 + /// + /// + /// + 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; + } + + /// + /// 得到类里面的属性集合 + /// + /// + /// + /// + 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(); + 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; + } + } + } +} diff --git a/ARW-net/ARW.Common/MailHelper.cs b/ARW-net/ARW.Common/MailHelper.cs new file mode 100644 index 0000000..4b69f51 --- /dev/null +++ b/ARW-net/ARW.Common/MailHelper.cs @@ -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 + { + /// + /// 发送人邮箱 + /// + public string FromEmail { get; set; } = ""; + /// + /// 发送人密码 + /// + public string FromPwd { get; set; } = ""; + /// + /// 发送协议 + /// + public string Smtp { get; set; } = "smtp.qq.com"; + /// + /// 协议端口 + /// + public int Port { get; set; } = 587; + /// + /// 邮件签名 + /// + public string Signature { get; set; } + /// + /// 是否使用SSL协议 + /// + 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; + } + + /// + /// 发送一个 + /// + /// + /// + /// + /// + public void SendMail(string toAddress, string subject, string text, string path = "", string html = "") + { + IEnumerable mailboxes = new List() { + new MailboxAddress(toAddress, toAddress) + }; + + SendMail(mailboxes, subject, text, path, html); + } + + /// + /// 发送多个邮箱 + /// + /// + /// + /// + /// + public void SendMail(string[] toAddress, string subject, string text, string path = "", string html = "") + { + IList mailboxes = new List() { }; + foreach (var item in toAddress) + { + mailboxes.Add(new MailboxAddress(item, item)); + } + + SendMail(mailboxes, subject, text, path, html); + } + + /// + /// 发送邮件 + /// + /// + /// 主题 + /// + /// 附件url地址 + /// 网页HTML内容 + private void SendMail(IEnumerable 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}"); + } + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Common/Tools.cs b/ARW-net/ARW.Common/Tools.cs new file mode 100644 index 0000000..42fe46f --- /dev/null +++ b/ARW-net/ARW.Common/Tools.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace ARW.Common +{ + public class Tools + { + /// + /// 要分割的字符串 eg: 1,3,10,00 + /// + /// + /// 分割的字符串 + /// + public static long[] SpitLongArrary(string str, char split = ',') + { + if (string.IsNullOrEmpty(str)) { return Array.Empty(); } + 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(); } + string[] strIds = str.Split(split, (char)StringSplitOptions.RemoveEmptyEntries); + int[] infoIdss = Array.ConvertAll(strIds, s => int.Parse(s)); + return infoIdss; + } + + /// + /// 根据日期获取星期几 + /// + public static string GetWeekByDate(DateTime dt) + { + var day = new[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; + return day[Convert.ToInt32(dt.DayOfWeek.ToString("d"))]; + } + + /// + /// 得到这个月的第几周 + /// + /// 年月日 + /// 传递过来的时间是第几周 + 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; + } + /// + /// 判断一个字符串是否为url + /// + /// + /// + 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; + } + } + + /// + /// 计算密码强度 + /// + /// 密码字符串 + /// + 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; //由数字、字母、符号构成的密码 + } + } +} diff --git a/ARW-net/ARW.Model/ARW.Model.csproj b/ARW-net/ARW.Model/ARW.Model.csproj new file mode 100644 index 0000000..4d0ab8a --- /dev/null +++ b/ARW-net/ARW.Model/ARW.Model.csproj @@ -0,0 +1,21 @@ + + + + net6.0 + ARW.Model + ARW.Model + + + + + + + + + + + + + + + diff --git a/ARW-net/ARW.Model/Dto/Business/Chat/ApplyDto.cs b/ARW-net/ARW.Model/Dto/Business/Chat/ApplyDto.cs new file mode 100644 index 0000000..2ee51c1 --- /dev/null +++ b/ARW-net/ARW.Model/Dto/Business/Chat/ApplyDto.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ARW.Model.Chat +{ + /// + /// 申请 + /// + 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; } + } + + /// + /// 查询对象 + /// + public class ApplyQueryDto : PagerInfo + { + public long? UserGuId { get; set; } + } +} diff --git a/ARW-net/ARW.Model/Dto/Business/Chat/ChatGPT/ChatGPTDto.cs b/ARW-net/ARW.Model/Dto/Business/Chat/ChatGPT/ChatGPTDto.cs new file mode 100644 index 0000000..ccc3cbe --- /dev/null +++ b/ARW-net/ARW.Model/Dto/Business/Chat/ChatGPT/ChatGPTDto.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ARW.Model.Chat.ChatGPT +{ + /// + /// Chat GPT传输对象 + /// + public class CahtGPTDto + { + public long SenderGuId { get; set; } + public long ReceiverGuId { get; set; } + public string Content { get; set; } + } + + /// + /// 查询对象 + /// + public class ChatGPTQueryDto : PagerInfo + { + public long? UserGuId { get; set; } + } +} diff --git a/ARW-net/ARW.Model/Dto/Business/Chat/ChatLogDto.cs b/ARW-net/ARW.Model/Dto/Business/Chat/ChatLogDto.cs new file mode 100644 index 0000000..d620313 --- /dev/null +++ b/ARW-net/ARW.Model/Dto/Business/Chat/ChatLogDto.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ARW.Model.Chat +{ + /// + /// 聊天记录 + /// + 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; } + } +} diff --git a/ARW-net/ARW.Model/Dto/Business/Chat/ChatUserDto.cs b/ARW-net/ARW.Model/Dto/Business/Chat/ChatUserDto.cs new file mode 100644 index 0000000..e68b884 --- /dev/null +++ b/ARW-net/ARW.Model/Dto/Business/Chat/ChatUserDto.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ARW.Model.Chat +{ + /// + /// 登录用户信息存储 + /// + 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; } + } + + /// + /// 查询对象 + /// + public class ChatUserQueryDto : PagerInfo + { + public string ChatUserName { get; set; } + public string ChatUserNickName { get; set; } + public int? ChatUserStatus { get; set; } + } + +} diff --git a/ARW-net/ARW.Model/Dto/Business/Chat/FindFriendsDto.cs b/ARW-net/ARW.Model/Dto/Business/Chat/FindFriendsDto.cs new file mode 100644 index 0000000..c3013d7 --- /dev/null +++ b/ARW-net/ARW.Model/Dto/Business/Chat/FindFriendsDto.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ARW.Model.Chat +{ + /// + /// 查找好友 + /// + public class FindFriendsDto + { + public string FriendName { get; set; } + } + + /// + /// 修改备注 + /// + public class UpdateNoteDto + { + public long UserGuId { get; set; } + public string Note { get; set; } + } +} diff --git a/ARW-net/ARW.Model/Dto/Business/Chat/FriendsDto.cs b/ARW-net/ARW.Model/Dto/Business/Chat/FriendsDto.cs new file mode 100644 index 0000000..87cfb6b --- /dev/null +++ b/ARW-net/ARW.Model/Dto/Business/Chat/FriendsDto.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ARW.Model.Chat +{ + /// + /// 好友 + /// + 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; } + } +} diff --git a/ARW-net/ARW.Model/Dto/Business/Chat/GroupDto.cs b/ARW-net/ARW.Model/Dto/Business/Chat/GroupDto.cs new file mode 100644 index 0000000..0351f36 --- /dev/null +++ b/ARW-net/ARW.Model/Dto/Business/Chat/GroupDto.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ARW.Model.Chat +{ + /// + /// 群聊 + /// + 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; } + } +} diff --git a/ARW-net/ARW.Model/Dto/Business/ClassDto.cs b/ARW-net/ARW.Model/Dto/Business/ClassDto.cs new file mode 100644 index 0000000..9c154b8 --- /dev/null +++ b/ARW-net/ARW.Model/Dto/Business/ClassDto.cs @@ -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 +{ + + /// + /// 输入对象 + /// + public class ClassDto + { + public long ClassId { get; set; } + [Required(ErrorMessage = "班级名称不能为空")] + public string ClassName { get; set; } + } + + /// + /// 查询对象 + /// + public class ClassQueryDto : PagerInfo + { + public long? ClassId { get; set; } + public string ClassName { get; set; } + } + +} diff --git a/ARW-net/ARW.Model/Dto/Business/Crawler/StudentDto.cs b/ARW-net/ARW.Model/Dto/Business/Crawler/StudentDto.cs new file mode 100644 index 0000000..68e1dbd --- /dev/null +++ b/ARW-net/ARW.Model/Dto/Business/Crawler/StudentDto.cs @@ -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 +{ + + /// + /// 查询对象 + /// + public class CrawlQueryDto : PagerInfo + { + + public string Name { get; set; } + } + +} diff --git a/ARW-net/ARW.Model/Dto/Business/Product/ProductTypeDto.cs b/ARW-net/ARW.Model/Dto/Business/Product/ProductTypeDto.cs new file mode 100644 index 0000000..0edd5a9 --- /dev/null +++ b/ARW-net/ARW.Model/Dto/Business/Product/ProductTypeDto.cs @@ -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 +{ + /// + /// 产品类型输入对象 + /// + public class ProductTypeDto + { + [Required(ErrorMessage = "产品类型Id不能为空")] + public long ProductTypeId { get; set; } + [Required(ErrorMessage = "产品类型不能为空")] + public string ProductTypeName { get; set; } + public long ParentId { get; set; } + } + + /// + /// 产品类型查询对象 + /// + public class ProductTypeQueryDto : PagerInfo + { + } +} diff --git a/ARW-net/ARW.Model/Dto/Business/StudentDto.cs b/ARW-net/ARW.Model/Dto/Business/StudentDto.cs new file mode 100644 index 0000000..acd2b9d --- /dev/null +++ b/ARW-net/ARW.Model/Dto/Business/StudentDto.cs @@ -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 +{ + + /// + /// 输入对象 + /// + public class StudentDto + { + /// + /// 学生Id + /// + 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; } + } + + /// + /// 查询对象 + /// + public class StudentQueryDto : PagerInfo + { + /// + /// 学生ID + /// + public long? StudentId { get; set; } + + /// + /// 班级ID + /// + public long? ClassId { get; set; } + + /// + /// 类型ID + /// + public string DictType { get; set; } + + /// + /// 学生名称 + /// + public string StudentName { get; set; } + } + +} diff --git a/ARW-net/ARW.Model/Models/Business/BusinessBase.cs b/ARW-net/ARW.Model/Models/Business/BusinessBase.cs new file mode 100644 index 0000000..863a30c --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/BusinessBase.cs @@ -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; } + } +} diff --git a/ARW-net/ARW.Model/Models/Business/Chat/Apply.cs b/ARW-net/ARW.Model/Models/Business/Chat/Apply.cs new file mode 100644 index 0000000..62a8a22 --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/Chat/Apply.cs @@ -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 + { + /// + /// 发起人id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnDescription = "发起人id", ColumnName = "sender_guid")] + public long SenderGuId { get; set; } + + /// + /// 接收人id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnDescription = "接收人id",ColumnName = "receiver_guid")] + public long ReceiverGuId { get; set; } + + /// + /// 附言 + /// + [SugarColumn(ColumnDescription = "附言", IsNullable = true, ColumnName = "postscript")] + public string Postscript { get; set; } + + /// + /// 回复 + /// + [SugarColumn(ColumnDescription = "回复", IsNullable = true, ColumnName = "reply")] + public string Reply { get; set; } + + /// + /// 是否同意 + /// + [SugarColumn(ColumnDescription = "是否同意", IsNullable = true, ColumnName = "isAgree")] + public bool? IsAgree { get; set; } + + /// + /// 是否群申请 + /// + [SugarColumn(ColumnDescription = "是否群申请", IsNullable = true, ColumnName = "isGroupApply")] + public bool? IsGroupApply { get; set; } + + /// + /// 是否已读 + /// + [SugarColumn(ColumnDescription = "是否已读", ColumnName = "isRead")] + public bool IsRead { get; set; } + + } + + +} diff --git a/ARW-net/ARW.Model/Models/Business/Chat/ChatGPT/ChatGPTLog.cs b/ARW-net/ARW.Model/Models/Business/Chat/ChatGPT/ChatGPTLog.cs new file mode 100644 index 0000000..dc2ce56 --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/Chat/ChatGPT/ChatGPTLog.cs @@ -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; } + + /// + /// 聊天记录id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true, ColumnName = "chat_gpt_log_guid")] + public long ChatGptLogGuId { get; set; } + + /// + /// 发送人guid(外键) + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnDescription = "发送人guid(外键)", ColumnName = "sender_guid")] + public long SenderGuId { get; set; } + + /// + /// 接收人guid(外键) + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnDescription = "接收人guid(外键)", ColumnName = "receiver_guid")] + public long ReceiverGuId { get; set; } + + /// + /// 发送时间 + /// + [SugarColumn(ColumnDescription = "发送时间", ColumnName = "chat_gpt_log_send_time")] + public DateTime ChatGptLogSendTime { get; set; } + + /// + /// 内容 + /// + [SugarColumn(ColumnDescription = "内容", ColumnDataType = "text", ColumnName = "chat_gpt_log_content")] + public string ChatGptLogContent { get; set; } + + /// + /// 备注 + /// + [SugarColumn(ColumnDescription = "备注", IsNullable = true, ColumnName = "chat_gpt_log_name")] + public string Remark { get; set; } + + /// + /// 是否已读 + /// + [SugarColumn(ColumnDescription = "是否已读", ColumnName = "isRead")] + public bool IsRead { get; set; } + + } + + +} diff --git a/ARW-net/ARW.Model/Models/Business/Chat/ChatLog.cs b/ARW-net/ARW.Model/Models/Business/Chat/ChatLog.cs new file mode 100644 index 0000000..8bda9ed --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/Chat/ChatLog.cs @@ -0,0 +1,72 @@ +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_log")] + public class ChatLog : BusinessBase + { + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "chat_log_id")] + public int ChatLogId { get; set; } + + /// + /// 聊天记录id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true, ColumnName = "chat_log_guid")] + public long ChatLogGuId { get; set; } + + /// + /// 聊天记录类型 + /// + [SugarColumn(Length = 1, ColumnDescription = "聊天记录类型(1:私聊,2:群聊)", ColumnName = "chat_log_type")] + public string ChatLogType { get; set; } + + /// + /// 发送人guid(外键) + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnDescription = "发送人guid(外键)", ColumnName = "sender_guid")] + public long SenderGuId { get; set; } + + /// + /// 接收人guid(外键) + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnDescription = "接收人guid(外键)", ColumnName = "receiver_guid")] + public long ReceiverGuId { get; set; } + + /// + /// 发送时间 + /// + [SugarColumn(ColumnDescription = "发送时间", ColumnName = "chat_log_send_time")] + public DateTime ChatLogSendTime { get; set; } + + /// + /// 内容 + /// + [SugarColumn(ColumnDescription = "内容", ColumnDataType = "text", ColumnName = "chat_log_content")] + public string ChatLogContent { get; set; } + + /// + /// 备注 + /// + [SugarColumn(ColumnDescription = "备注", IsNullable = true, ColumnName = "chat_log_name")] + public string Remark { get; set; } + + /// + /// 是否已读 + /// + [SugarColumn(ColumnDescription = "是否已读", ColumnName = "isRead")] + public bool IsRead { get; set; } + + } + + +} diff --git a/ARW-net/ARW.Model/Models/Business/Chat/ChatUser.cs b/ARW-net/ARW.Model/Models/Business/Chat/ChatUser.cs new file mode 100644 index 0000000..74d3f6d --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/Chat/ChatUser.cs @@ -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; } + + /// + /// 用户id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true, ColumnName = "chat_user_guid")] + public long ChatUserGuId { get; set; } + + /// + /// 用户名 + /// + [SugarColumn(ColumnDescription = "用户名", ColumnName = "chat_user_name")] + public string ChatUserName { get; set; } + + /// + /// 密码 + /// + [JsonIgnore] + [EpplusIgnore] + public string Password { get; set; } + + /// + /// 昵称 + /// + [SugarColumn(ColumnDescription = "昵称", ColumnName = "chat_user_nickname")] + public string ChatUserNickName { get; set; } + + /// + /// 性别(1:男,2:女) + /// + [SugarColumn(Length = 1, ColumnDescription = "性别(1:男,2:女)", IsNullable = true, ColumnName = "chat_user_sex")] + public string Sex { get; set; } + + /// + /// 年龄 + /// + [SugarColumn(ColumnDescription = "年龄", IsNullable = true, ColumnName = "chat_user_age")] + public int? Age { get; set; } + + /// + /// 用户图片(路径) + /// + [SugarColumn(ColumnDescription = "用户头像", IsNullable = true, ColumnName = "chat_user_img")] + public string ChatUserImg { get; set; } + + /// + /// 电话号码 + /// + [SugarColumn(ColumnDescription = "电话号码", IsNullable = true, ColumnName = "chat_user_phone")] + public string Phone { get; set; } + + /// + /// 邮箱 + /// + [SugarColumn(ColumnDescription = "邮箱", IsNullable = true, ColumnName = "chat_user_email")] + public string Email { get; set; } + + /// + /// 登录状态(1,在线 | 0,离线) + /// + [SugarColumn(ColumnDescription = "登录状态(1,在线 | 0,离线)", ColumnName = "chat_user_status")] + public int? Status { get; set; } + } + + +} diff --git a/ARW-net/ARW.Model/Models/Business/Chat/Friends.cs b/ARW-net/ARW.Model/Models/Business/Chat/Friends.cs new file mode 100644 index 0000000..b41eeb1 --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/Chat/Friends.cs @@ -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 + { + /// + /// 用户id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName = "uesr_guid")] + public long UserGuId { get; set; } + + /// + /// 好友id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName = "friends_guid")] + public long FriendsGuId { get; set; } + + /// + /// 备注 + /// + [SugarColumn(ColumnDescription = "备注", IsNullable = true, ColumnName = "friends_note")] + public string FriendsNote { get; set; } + + } + + +} diff --git a/ARW-net/ARW.Model/Models/Business/Chat/Group.cs b/ARW-net/ARW.Model/Models/Business/Chat/Group.cs new file mode 100644 index 0000000..c1cc8c3 --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/Chat/Group.cs @@ -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 + { + /// + /// 群聊id + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "group_id")] + public int GroupId { get; set; } + + /// + /// 群聊guid + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true, ColumnName = "group_guid")] + public long GroupGuId { get; set; } + + /// + /// 群名称 + /// + [SugarColumn(ColumnName = "group_name", ColumnDescription = "群名称")] + public string GroupName { get; set; } + + /// + /// 群头像 + /// + [SugarColumn(ColumnDescription = "群头像", IsNullable = true, ColumnName = "group_img")] + public string GroupImg { get; set; } + + } + + +} diff --git a/ARW-net/ARW.Model/Models/Business/Chat/GroupUser.cs b/ARW-net/ARW.Model/Models/Business/Chat/GroupUser.cs new file mode 100644 index 0000000..a4fbef0 --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/Chat/GroupUser.cs @@ -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 + { + /// + /// 群聊id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName = "group_guid",ColumnDescription = "群guid(外键)")] + public long GroupGuId { get; set; } + + /// + /// 用户id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName = "user_guid", ColumnDescription = "用户guid(外键)")] + public long UserGuId { get; set; } + + /// + /// 是否群主 + /// + [SugarColumn(ColumnName = "isgroup_manager", ColumnDescription = "是否为群主")] + public bool IsGroupManager { get; set; } + + /// + /// 是否群主 + /// + [SugarColumn(ColumnName = "IsRead", ColumnDescription = "是否已读")] + public bool IsRead { get; set; } + + } + + +} diff --git a/ARW-net/ARW.Model/Models/Business/Class.cs b/ARW-net/ARW.Model/Models/Business/Class.cs new file mode 100644 index 0000000..126a114 --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/Class.cs @@ -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 + { + /// + /// 班级Id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true, ColumnName = "class_id")] + public long ClassId { get; set; } + + /// + /// 班级名称 + /// + [SugarColumn(ColumnDescription = "班级名称",ColumnName = "class_name")] + public string ClassName { get; set; } + + } +} diff --git a/ARW-net/ARW.Model/Models/Business/Crawler/Crawl.cs b/ARW-net/ARW.Model/Models/Business/Crawler/Crawl.cs new file mode 100644 index 0000000..5cc5fda --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/Crawler/Crawl.cs @@ -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 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; } + } + +} diff --git a/ARW-net/ARW.Model/Models/Business/Product/ProductType.cs b/ARW-net/ARW.Model/Models/Business/Product/ProductType.cs new file mode 100644 index 0000000..27c7c89 --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/Product/ProductType.cs @@ -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 + { + /// + /// 班级Id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true, ColumnName = "product_type_id")] + public long ProductTypeId{ get; set; } + + /// + /// 班级名称 + /// + [SugarColumn(ColumnDescription = "产品类型",ColumnName = "product_type_name")] + public string ProductTypeName { get; set; } + + /// + /// 父级Id + /// + [SugarColumn(ColumnDescription = "父级Id", IsNullable = true, ColumnName = "parent_id")] + public long ParentId { get; set; } + + /// + /// 子级内容 + /// + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + [SugarColumn(IsIgnore = true)] + public List Children { get; set; } + } +} diff --git a/ARW-net/ARW.Model/Models/Business/Student.cs b/ARW-net/ARW.Model/Models/Business/Student.cs new file mode 100644 index 0000000..05aada9 --- /dev/null +++ b/ARW-net/ARW.Model/Models/Business/Student.cs @@ -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 + { + /// + /// 学生id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true, ColumnName = "student_id")] + public long StudentId { get; set; } + + /// + /// 班级guid(外键) + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnDescription = "班级guid(外键)", ColumnName = "class_guid")] + public long ClassId { get; set; } + + /// + /// 字典类型(外键) + /// + [SugarColumn(ColumnDescription = "字典类型(外键)", IsNullable = true, ColumnName = "dictType")] + public string DictType { get; set; } + + /// + /// 学生名称 + /// + [SugarColumn(ColumnDescription = "学生名称", IsNullable = true, ColumnName = "student_name")] + public string StudentName { get; set; } + + /// + /// 性别(1:男,2:女) + /// + [SugarColumn(Length = 1, ColumnDescription = "性别(1:男,2:女)", IsNullable = true, ColumnName = "student_sex")] + public string Sex { get; set; } + + /// + /// 年龄 + /// + [SugarColumn(ColumnDescription = "年龄", IsNullable = true, ColumnName = "student_age")] + public int? Age { get; set; } + + /// + /// 学生图片(路径) + /// + [SugarColumn(ColumnDescription = "学生图片", IsNullable = true, ColumnName = "student_img")] + public string StudentImg { get; set; } + + /// + /// 学生标签(单个字段,以","分开) + /// + [SugarColumn(ColumnDescription = "学生标签", IsNullable = true, ColumnName = "student_tag")] + public string StudentTag { get; set; } + + /// + /// 学生服务(json) + /// + [SugarColumn(ColumnDescription = "学生服务", ColumnDataType = "text", IsNullable = true, ColumnName = "student_service", IsJson = true)] + public Service[] StudentService { get; set; } + + /// + /// 学生描述(富文本) + /// + [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; } + } +} diff --git a/ARW-net/ARW.Model/PagedInfo.cs b/ARW-net/ARW.Model/PagedInfo.cs new file mode 100644 index 0000000..d696216 --- /dev/null +++ b/ARW-net/ARW.Model/PagedInfo.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Model +{ + /// + /// 分页参数 + /// + public class PagedInfo + { + /// + /// 每页行数 + /// + public int PageSize { get; set; } = 10; + /// + /// 当前页 + /// + public int PageIndex { get; set; } = 1; + /// + /// 总记录数 + /// + public int TotalNum { get; set; } + /// + /// 总页数 + /// + 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 Result { get; set; } + public Dictionary Extra { get; set; } = new Dictionary(); + public PagedInfo() + { + } + } +} diff --git a/ARW-net/ARW.Model/PagerInfo.cs b/ARW-net/ARW.Model/PagerInfo.cs new file mode 100644 index 0000000..b185410 --- /dev/null +++ b/ARW-net/ARW.Model/PagerInfo.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Model +{ + public class PagerInfo + { + /// + /// 当前页码 + /// + public int PageNum { get; set; } + public int PageSize { get; set; } + /// + /// 总记录数 + /// + public int TotalNum { get; set; } + /// + /// 总页码 + /// + /// + /// 总页数 + /// + public int TotalPage + { + get + { + return TotalNum > 0 ? TotalNum % PageSize == 0 ? TotalNum / PageSize : TotalNum / PageSize + 1 : 0; + } + } + + /// + /// 排序字段 + /// + public string Sort { get; set; } = string.Empty; + /// + /// 排序类型,前端传入的是"ascending","descending" + /// + 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; + } + } +} diff --git a/ARW-net/ARW.Model/System/CommonLang.cs b/ARW-net/ARW.Model/System/CommonLang.cs new file mode 100644 index 0000000..d5fd9c7 --- /dev/null +++ b/ARW-net/ARW.Model/System/CommonLang.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using SqlSugar; +using OfficeOpenXml.Attributes; +using Newtonsoft.Json; + +namespace ARW.Model.Models +{ + /// + /// 多语言配置,数据实体对象 + /// + /// @author + /// + /// @date 2022-05-06 + /// + [Tenant("0")] + [SugarTable("sys_common_lang")] + public class CommonLang + { + /// + /// 描述 : id + /// 空值 : false + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusTableColumn(Header = "id")] + [SugarColumn(IsPrimaryKey = true)] + public long Id { get; set; } + + /// + /// 描述 : 语言code + /// 空值 : false + /// + [EpplusTableColumn(Header = "语言code")] + [SugarColumn(ColumnName = "lang_code")] + public string LangCode { get; set; } + + /// + /// 描述 : 语言key + /// 空值 : true + /// + [EpplusTableColumn(Header = "语言key")] + [SugarColumn(ColumnName = "lang_key")] + public string LangKey { get; set; } + + /// + /// 描述 : 名称 + /// 空值 : false + /// + [EpplusTableColumn(Header = "名称")] + [SugarColumn(ColumnName = "lang_name")] + public string LangName { get; set; } + + /// + /// 描述 : 添加时间 + /// 空值 : true + /// + [EpplusTableColumn(Header = "添加时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")] + public DateTime? Addtime { get; set; } + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Model/System/Dto/CommonLangDto.cs b/ARW-net/ARW.Model/System/Dto/CommonLangDto.cs new file mode 100644 index 0000000..9f28e07 --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/CommonLangDto.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; + +namespace ARW.Model.Dto +{ + /// + /// 多语言配置输入对象 + /// + 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 LangList { get; set; } + } + + /// + /// 多语言配置查询对象 + /// + 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; } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/GenTableDto.cs b/ARW-net/ARW.Model/System/Dto/GenTableDto.cs new file mode 100644 index 0000000..514b7e5 --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/GenTableDto.cs @@ -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; } + /// + /// 额外参数 + /// + public Options Params { get; set; } + public List Columns { get; set; } + } + + /// + /// 额外参数 + /// ****注意里面参数统一首字母小写***** + /// + 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; } + /// + /// 额外参数字符串 + /// + 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; } + /// + /// 显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件) + /// + public string HtmlType { get; set; } + /// + /// 查询类型(等于、不等于、大于、小于、范围) + /// + public string QueryType { get; set; } = "EQ"; + public int Sort { get; set; } + /// + /// 字典类型 + /// + public string DictType { get; set; } + /// + /// 备注 + /// + public string Remark { get; set; } + } + +} diff --git a/ARW-net/ARW.Model/System/Dto/LoginBodyDto.cs b/ARW-net/ARW.Model/System/Dto/LoginBodyDto.cs new file mode 100644 index 0000000..1e9a936 --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/LoginBodyDto.cs @@ -0,0 +1,30 @@ +using System.ComponentModel.DataAnnotations; + +namespace ARW.Model.System.Dto +{ + public class LoginBodyDto + { + /// + /// 用户名 + /// + [Required(ErrorMessage = "用户名不能为空")] + public string Username { get; set; } + + /// + /// 用户密码 + /// + [Required(ErrorMessage = "密码不能为空")] + public string Password { get; set; } + + /** + * 验证码 + */ + public string Code { get; set; } + + /** + * 唯一标识 + */ + public string Uuid { get; set; } = ""; + public string LoginIP { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/MenuDto.cs b/ARW-net/ARW.Model/System/Dto/MenuDto.cs new file mode 100644 index 0000000..58e0c5d --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/MenuDto.cs @@ -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; } + /// + /// 父菜单ID + /// + public long? parentId { get; set; } + + /// + /// 显示顺序 + /// + public int orderNum { get; set; } + + /// + /// 路由地址 + /// + public string path { get; set; } = "#"; + + /// + /// 组件路径 + /// + public string component { get; set; } + + /// + /// 是否缓存(1缓存 0不缓存) + /// + [Required(ErrorMessage = "是否缓存不能为空")] + public string isCache { get; set; } + /// + /// 是否外链 1、是 0、否 + /// + public string isFrame { get; set; } + + /// + /// 类型(M目录 C菜单 F按钮 L链接) + /// + [Required(ErrorMessage = "菜单类型不能为空")] + public string menuType { get; set; } + + /// + /// 显示状态(0显示 1隐藏) + /// + [Required(ErrorMessage = "显示状态不能为空")] + public string visible { get; set; } + + /// + /// 菜单状态(0正常 1停用) + /// + [Required(ErrorMessage = "菜单状态不能为空")] + public string status { get; set; } + + /// + /// 权限字符串 + /// + public string perms { get; set; } + + /// + /// 菜单图标 + /// + public string icon { get; set; } = string.Empty; + /// + /// 翻译key + /// + 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); + } + } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/RegisterDto.cs b/ARW-net/ARW.Model/System/Dto/RegisterDto.cs new file mode 100644 index 0000000..38159c2 --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/RegisterDto.cs @@ -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 + { + /// + /// 用户名 + /// + [Required(ErrorMessage = "用户名不能为空")] + public string Username { get; set; } + + /// + /// 用户密码 + /// + [Required(ErrorMessage = "密码不能为空")] + public string Password { get; set; } + [Required(ErrorMessage = "确认密码不能为空")] + public string ConfirmPassword { get; set; } + /** + * 验证码 + */ + public string Code { get; set; } + + /** + * 唯一标识 + */ + public string Uuid { get; set; } = ""; + } +} diff --git a/ARW-net/ARW.Model/System/Dto/RoleUserDto.cs b/ARW-net/ARW.Model/System/Dto/RoleUserDto.cs new file mode 100644 index 0000000..f8b9e35 --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/RoleUserDto.cs @@ -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 + { + /// + /// 描述 : 角色id + /// 空值 : False + /// 默认 : + /// + [Display(Name = "角色id")] + [Required(ErrorMessage = "roleId 不能为空")] + public long RoleId { get; set; } + + /// + /// 描述 : 用户编码 [1,2,3,4] + /// 空值 : False + /// 默认 : + /// + [Display(Name = "用户编码 [1,2,3,4]")] + public List UserIds { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/SysConfigDto.cs b/ARW-net/ARW.Model/System/Dto/SysConfigDto.cs new file mode 100644 index 0000000..4c985ef --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/SysConfigDto.cs @@ -0,0 +1,30 @@ +using System; + +namespace ARW.Model.System.Dto +{ + /// + /// 参数配置输入对象模型 + /// + 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; } + } + + /// + /// 参数配置查询对象模型 + /// + 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; } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/SysFileQueryDto.cs b/ARW-net/ARW.Model/System/Dto/SysFileQueryDto.cs new file mode 100644 index 0000000..879e612 --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/SysFileQueryDto.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Model.System.Dto +{ + /// + /// 文件存储输入对象 + /// + public class SysFileDto + { + public long Id { get; set; } + /// + /// 文件原名 + /// + public string RealName { get; set; } + /// + /// 文件类型 + /// + public string FileType { get; set; } + /// + /// 描述 : 存储文件名 + /// 空值 : true + /// + public string FileName { get; set; } + /// + /// 描述 : 文件存储地址 eg:/uploads/20220202 + /// 空值 : true + /// + public string FileUrl { get; set; } + /// + /// 描述 : 仓库位置 eg:/uploads + /// 空值 : true + /// + public string StorePath { get; set; } + /// + /// 描述 : 文件大小 + /// 空值 : true + /// + public string FileSize { get; set; } + /// + /// 描述 : 文件扩展名 + /// 空值 : true + /// + public string FileExt { get; set; } + /// + /// 描述 : 创建人 + /// 空值 : true + /// + public string Create_by { get; set; } + /// + /// 描述 : 上传时间 + /// 空值 : true + /// + public DateTime? Create_time { get; set; } + /// + /// 描述 : 存储类型 + /// 空值 : true + /// + public int? StoreType { get; set; } + /// + /// 描述 : 访问路径 + /// 空值 : true + /// + 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; } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/SysLogininfoDto.cs b/ARW-net/ARW.Model/System/Dto/SysLogininfoDto.cs new file mode 100644 index 0000000..5a0f25d --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/SysLogininfoDto.cs @@ -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; } + /// + /// IP 地址 + /// + public string Ipaddr { get; set; } + /// + /// 登录状态 0成功 1失败 + /// + public string Status { get; set; } + /// + /// 用户名 + /// + public string UserName { get; set; } + + } +} diff --git a/ARW-net/ARW.Model/System/Dto/SysNoticeDto.cs b/ARW-net/ARW.Model/System/Dto/SysNoticeDto.cs new file mode 100644 index 0000000..7fef20f --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/SysNoticeDto.cs @@ -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 +{ + /// + /// 通知公告表输入对象 + /// + 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; } + } + + /// + /// 通知公告表查询对象 + /// + public class SysNoticeQueryDto : PagerInfo + { + public string NoticeTitle { get; set; } + public string NoticeType { get; set; } + public string CreateBy { get; set; } + public string Status { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/SysOperLogDto.cs b/ARW-net/ARW.Model/System/Dto/SysOperLogDto.cs new file mode 100644 index 0000000..9cccbcd --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/SysOperLogDto.cs @@ -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 + { + /// + /// 页码 + /// + public int pageNum { get; set; } + public int PageSize { get; set; } + /// + /// 操作人员 + /// + public string operName { get; set; } + /// + /// 业务类型 0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据 + /// + public int BusinessType { get; set; } = -1; + /// + /// 状态 + /// + public int Status { get; set; } = -1; + /// + /// 操作模块 + /// + public string Title { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/SysRoleDto.cs b/ARW-net/ARW.Model/System/Dto/SysRoleDto.cs new file mode 100644 index 0000000..59df3e9 --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/SysRoleDto.cs @@ -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; } + /// + /// 角色分配菜单 + /// + public List MenuIds { get; set; } = new List(); + public string RoleName { get; set; } + public string RoleKey { get; set; } + public int RoleSort { get; set; } + public string Status { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/SysUserDto.cs b/ARW-net/ARW.Model/System/Dto/SysUserDto.cs new file mode 100644 index 0000000..ddcacc4 --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/SysUserDto.cs @@ -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; } + /// + /// '用户性别(0男 1女 2未知)', + /// + public int Sex { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/SysdictDataDto.cs b/ARW-net/ARW.Model/System/Dto/SysdictDataDto.cs new file mode 100644 index 0000000..3490829 --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/SysdictDataDto.cs @@ -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 List { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/TasksDto.cs b/ARW-net/ARW.Model/System/Dto/TasksDto.cs new file mode 100644 index 0000000..95811ad --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/TasksDto.cs @@ -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 + { + /// + /// 描述 : 查询字符串 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "查询字符串")] + public string QueryText { get; set; } + } + + /// + /// 添加任务 + /// + public class TasksCreateDto + { + /// + /// 描述 : 任务名称 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "任务名称")] + [Required(ErrorMessage = "任务名称不能为空")] + public string Name { get; set; } + + /// + /// 描述 : 任务分组 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "任务分组")] + [Required(ErrorMessage = "任务分组不能为空")] + public string JobGroup { get; set; } + + /// + /// 描述 : 运行时间表达式 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "运行时间表达式")] + public string Cron { get; set; } + + /// + /// 描述 : 程序集名称 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "程序集名称")] + //[Required(ErrorMessage = "程序集名称不能为空")] + public string AssemblyName { get; set; } + + /// + /// 描述 : 任务所在类 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "任务所在类")] + //[Required(ErrorMessage = "任务所在类不能为空")] + public string ClassName { get; set; } + + /// + /// 描述 : 任务描述 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "任务描述")] + public string Remark { get; set; } + + /// + /// 描述 : 开始时间 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "开始时间")] + public DateTime? BeginTime { get; set; } + + /// + /// 描述 : 结束时间 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "结束时间")] + public DateTime? EndTime { get; set; } + + /// + /// 描述 : 触发器类型(0、simple 1、cron) + /// 空值 : False + /// 默认 : + /// + [Display(Name = "触发器类型(0、simple 1、cron)")] + public int TriggerType { get; set; } + + /// + /// 描述 : 执行间隔时间(单位:秒) + /// 空值 : False + /// 默认 : 0 + /// + [Display(Name = "执行间隔时间(单位:秒)")] + public int IntervalSecond { get; set; } + + /// + /// 描述 : 传入参数 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "传入参数")] + public string JobParams { get; set; } + public string ApiUrl { get; set; } + /// + /// 1、程序集任务 2、apiUrl任务 + /// + public int TaskType { get; set; } + } + + /// + /// 更新任务 + /// + public class TasksUpdateDto + { + /// + /// 描述 : UID + /// 空值 : False + /// 默认 : + /// + [Display(Name = "UID")] + [Required(ErrorMessage = "UID不能为空")] + public string ID { get; set; } + + /// + /// 描述 : 任务名称 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "任务名称")] + [Required(ErrorMessage = "任务名称不能为空")] + public string Name { get; set; } + + /// + /// 描述 : 任务分组 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "任务分组")] + [Required(ErrorMessage = "任务分组不能为空")] + public string JobGroup { get; set; } + + /// + /// 描述 : 运行时间表达式 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "运行时间表达式")] + public string Cron { get; set; } + + /// + /// 描述 : 程序集名称 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "程序集名称")] + [Required(ErrorMessage = "程序集名称不能为空")] + public string AssemblyName { get; set; } + + /// + /// 描述 : 任务所在类 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "任务所在类")] + [Required(ErrorMessage = "任务所在类不能为空")] + public string ClassName { get; set; } + + /// + /// 描述 : 任务描述 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "任务描述")] + public string Remark { get; set; } + + /// + /// 描述 : 开始时间 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "开始时间")] + public DateTime? BeginTime { get; set; } + + /// + /// 描述 : 结束时间 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "结束时间")] + public DateTime? EndTime { get; set; } + + /// + /// 描述 : 触发器类型(0、simple 1、cron) + /// 空值 : False + /// 默认 : + /// + [Display(Name = "触发器类型(0、simple 1、cron)")] + public int TriggerType { get; set; } + + /// + /// 描述 : 执行间隔时间(单位:秒) + /// 空值 : False + /// 默认 : 0 + /// + [Display(Name = "执行间隔时间(单位:秒)")] + public int IntervalSecond { get; set; } + + /// + /// 描述 : 传入参数 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "传入参数")] + public string JobParams { get; set; } + public string ApiUrl { get; set; } + /// + /// 1、程序集任务 2、apiUrl任务 + /// + public int TaskType { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/Dto/TasksLogDto.cs b/ARW-net/ARW.Model/System/Dto/TasksLogDto.cs new file mode 100644 index 0000000..9899216 --- /dev/null +++ b/ARW-net/ARW.Model/System/Dto/TasksLogDto.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Model.System.Dto +{ + public class TasksLogQueryDto + { + /// + /// 描述 : 查询字符串 + /// 空值 : False + /// 默认 : + /// + //[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 + { + + } +} diff --git a/ARW-net/ARW.Model/System/Generate/GenTable.cs b/ARW-net/ARW.Model/System/Generate/GenTable.cs new file mode 100644 index 0000000..db2dc81 --- /dev/null +++ b/ARW-net/ARW.Model/System/Generate/GenTable.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Model.System.Generate +{ + /// + /// 代码生成表 + /// + [SqlSugar.SugarTable("gen_table")] + [SqlSugar.Tenant("0")] + public class GenTable : SysBase + { + /// + /// 表id + /// + [SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + public int TableId { get; set; } + /// + /// 数据库名 + /// + public string DbName { get; set; } + /// + /// 表名 + /// + public string TableName { get; set; } + /// + /// 表描述 + /// + public string TableComment { get; set; } + /// + /// 关联父表的表名 + /// + public string SubTableName { get; set; } + /// + /// 本表关联父表的外键名 + /// + public string SubTableFkName { get; set; } + /// + /// csharp类名 + /// + public string ClassName { get; set; } + /// + /// 使用的模板(crud单表操作 tree树表操作 sub主子表操作) + /// + 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; } + /// + /// 生成代码方式(0zip压缩包 1自定义路径) + /// + public string GenType { get; set; } + public string GenPath { get; set; } + /// + /// 其他生成选项 + /// + [SqlSugar.SugarColumn(IsJson = true, ColumnDataType = "nvarchar(4000)")] + public Options Options { get; set; } + + #region 表额外字段 + /** 表列信息 */ + [SqlSugar.SugarColumn(IsIgnore = true)] + public List Columns { get; set; } + + /// + /// 字表信息 + /// + [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; + /// + /// 额外参数字符串 + /// + public int[] CheckedBtn { get; set; } = new int[] { 1, 2, 3 }; + /// + /// 列大小 12,24 + /// + public int ColNum { get; set; } = 12; + } +} diff --git a/ARW-net/ARW.Model/System/Generate/GenTableColumn.cs b/ARW-net/ARW.Model/System/Generate/GenTableColumn.cs new file mode 100644 index 0000000..3e70eba --- /dev/null +++ b/ARW-net/ARW.Model/System/Generate/GenTableColumn.cs @@ -0,0 +1,131 @@ +using SqlSugar; +using System; +using System.Linq; + +namespace ARW.Model.System.Generate +{ + /// + /// 代码生成表字段 + /// + [SugarTable("gen_table_column")] + [Tenant("0")] + public class GenTableColumn : SysBase + { + [SugarColumn(IsIdentity = true, IsPrimaryKey = true)] + public int ColumnId { get; set; } + /// + /// 导入代码生成表列名 首字母转了小写 + /// + public string ColumnName { get; set; } + [SugarColumn(IsOnlyIgnoreUpdate = true)] + public int TableId { get; set; } + + [SugarColumn(IsOnlyIgnoreUpdate = true)] + public string TableName { get; set; } + /// + /// 列说明 + /// + public string ColumnComment { get; set; } = string.Empty; + /// + /// 数据库列类型 + /// + + [SugarColumn(IsOnlyIgnoreUpdate = true)] + public string ColumnType { get; set; } + /// + /// C#类型 + /// + public string CsharpType { get; set; } + /// + /// C# 字段名 首字母大写 + /// + public string CsharpField { get; set; } + /// + /// 是否主键(1是) + /// + [SugarColumn(IsOnlyIgnoreUpdate = true)] + public bool IsPk { get; set; } + /// + /// 是否必填(1是) + /// + public bool IsRequired { get; set; } + /// + /// 是否自增(1是) + /// + [SugarColumn(IsOnlyIgnoreUpdate = true)] + public bool IsIncrement { get; set; } + /// + /// 是否插入(1是) + /// + public bool IsInsert { get; set; } + /// + /// 是否需要编辑(1是) + /// + public bool IsEdit { get; set; } + /// + /// 是否显示列表(1是) + /// + public bool IsList { get; set; } + /// + /// 是否查询(1是) + /// + public bool IsQuery { get; set; } + /// + /// 是否排序(1是) + /// + public bool IsSort { get; set; } + /// + /// 显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件) + /// + public string HtmlType { get; set; } + /// + /// 查询类型(等于、不等于、大于、小于、范围) + /// + public string QueryType { get; set; } = "EQ"; + public int Sort { get; set; } + /// + /// 字典类型 + /// + 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) ? "?" : ""; + } + } + /// + /// 前端排序字符串 + /// + [SugarColumn(IsIgnore = true)] + public string SortStr + { + get + { + return IsSort ? " sortable" : ""; + } + } + /// + /// C# 字段名 首字母小写,用于前端 + /// + [SugarColumn(IsIgnore = true)] + public string CsharpFieldFl { get; set; } + /// + /// 前端 只读字段 + /// + [SugarColumn(IsIgnore = true)] + public string DisabledStr + { + get + { + return (((!IsInsert && !IsEdit) || IsPk) && !IsRequired) ? " :disabled=\"true\"" : ""; + } + } + + #endregion + } +} diff --git a/ARW-net/ARW.Model/System/LoginUser.cs b/ARW-net/ARW.Model/System/LoginUser.cs new file mode 100644 index 0000000..cde7d80 --- /dev/null +++ b/ARW-net/ARW.Model/System/LoginUser.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ARW.Model.System +{ + /// + /// 登录用户信息存储 + /// + public class LoginUser + { + public long UserId { get; set; } + public long DeptId { get; set; } + public string UserName { get; set; } + /// + /// 角色集合 + /// + public List RoleIds { get; set; } + /// + /// 角色集合(数据权限过滤使用) + /// + public List Roles { get; set; } + /// + /// 权限集合 + /// + public List Permissions { get; set; } = new List(); + public LoginUser() + { + } + + public LoginUser(SysUser user, List roles, List permissions) + { + UserId = user.UserId; + UserName = user.UserName; + DeptId = user.DeptId; + Roles = roles; + RoleIds = roles.Select(f => f.RoleKey).ToList(); + Permissions = permissions; + } + } +} diff --git a/ARW-net/ARW.Model/System/SysBase.cs b/ARW-net/ARW.Model/System/SysBase.cs new file mode 100644 index 0000000..840c44b --- /dev/null +++ b/ARW-net/ARW.Model/System/SysBase.cs @@ -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; } + + /// + /// 搜索时间起始时间 + /// + /// + /// Write:需穿一个bool值,false时insert,update等操作会忽略此列(和Computed的作用差不多,看了源码也没发现与Computed有什么不一样的地方,有了解的朋友可以赐教下哈) + /// ExplicitKey:指定此列为主键(不自动增长类型例如guid,ExplicitKey与Key地区别下面会详细讲) + /// Key:指定此列为主键(自动增长主键),可忽略,忽略后默认查找 + /// [Computed]计算属性,打上此标签,对象地insert,update等操作会忽略此列 + /// + [SugarColumn(IsIgnore = true)] + [JsonIgnore] + [EpplusIgnore] + public DateTime? BeginTime { get; set; } + + /// + /// 用于搜索使用 + /// + [SugarColumn(IsIgnore = true)] + [JsonIgnore] + [EpplusIgnore] + public DateTime? EndTime { get; set; } + + [JsonProperty(propertyName: "IsDelete")] + [SugarColumn(IsNullable = true)] + [EpplusIgnore] + public bool IsDelete { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/SysConfig.cs b/ARW-net/ARW.Model/System/SysConfig.cs new file mode 100644 index 0000000..c38d7f1 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysConfig.cs @@ -0,0 +1,46 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Model.System +{ + /// + /// 参数配置,数据实体对象 + /// + /// @author zhaorui + /// @date 2021-09-29 + /// + [SugarTable("sys_config")] + [Tenant("0")] + public class SysConfig: SysBase + { + /// + /// 描述 : + /// 空值 :False + /// + [SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + public int ConfigId { get; set; } + /// + /// 描述 : + /// 空值 :True + /// + public string ConfigName { get; set; } + /// + /// 描述 : + /// 空值 :True + /// + public string ConfigKey { get; set; } + /// + /// 描述 : + /// 空值 :True + /// + public string ConfigValue { get; set; } + /// + /// 描述 : + /// 空值 :True + /// + public string ConfigType { get; set; } + + } +} diff --git a/ARW-net/ARW.Model/System/SysDept.cs b/ARW-net/ARW.Model/System/SysDept.cs new file mode 100644 index 0000000..f5abb93 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysDept.cs @@ -0,0 +1,58 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Model.System +{ + /// + /// 部门表 + /// + [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; } + + /// + /// 删除标志(0代表存在 2代表删除) + /// + [SugarColumn(IsOnlyIgnoreInsert = true)] + public string DelFlag { get; set; } + + /** 父部门名称 */ + //[SugarColumn(IsIgnore = true)] + //public string ParentName { get; set; } + + /// + /// 子菜单 + /// + public List children = new List(); + } +} diff --git a/ARW-net/ARW.Model/System/SysDictData.cs b/ARW-net/ARW.Model/System/SysDictData.cs new file mode 100644 index 0000000..31fa5a2 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysDictData.cs @@ -0,0 +1,31 @@ +//using Dapper.Contrib.Extensions; +using System; +using System.Collections.Generic; +using System.Text; +using SqlSugar; + +namespace ARW.Model.System +{ + /// + /// 字典数据表 + /// + [Tenant("0")] + [SugarTable("sys_dict_data")] + public class SysDictData: SysBase + { + //[Key] + /// + /// 字典主键 + /// + [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; } + } +} diff --git a/ARW-net/ARW.Model/System/SysDictType.cs b/ARW-net/ARW.Model/System/SysDictType.cs new file mode 100644 index 0000000..d8a35a2 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysDictType.cs @@ -0,0 +1,36 @@ +using OfficeOpenXml.Attributes; +using SqlSugar; + +namespace ARW.Model.System +{ + /// + /// 字典类型表 + /// + [SugarTable("sys_dict_type")] + [Tenant("0")] + public class SysDictType : SysBase + { + /// + /// 字典主键 + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//主键并且自增 (string不能设置自增) + public long DictId { get; set; } + /// + /// 字典名称 + /// + public string DictName { get; set; } + /// + /// 字典类型 + /// + public string DictType { get; set; } + /// + /// 状态 0、正常 1、停用 + /// + [EpplusIgnore] + public string Status { get; set; } + /// + /// 系统内置 Y是 N否 + /// + public string Type { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/SysFile.cs b/ARW-net/ARW.Model/System/SysFile.cs new file mode 100644 index 0000000..36bfb0b --- /dev/null +++ b/ARW-net/ARW.Model/System/SysFile.cs @@ -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 + { + /// + /// 描述 : 自增id + /// 空值 : false + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true)] + public long Id { get; set; } + /// + /// 文件原名 + /// + public string RealName { get; set; } + /// + /// 文件类型 + /// + public string FileType { get; set; } + /// + /// 描述 : 存储文件名 + /// 空值 : true + /// + public string FileName { get; set; } + /// + /// 描述 : 文件存储地址 eg:/uploads/20220202 + /// 空值 : true + /// + public string FileUrl { get; set; } + /// + /// 描述 : 仓库位置 eg:/uploads + /// 空值 : true + /// + public string StorePath { get; set; } + /// + /// 描述 : 文件大小 + /// 空值 : true + /// + public string FileSize { get; set; } + /// + /// 描述 : 文件扩展名 + /// 空值 : true + /// + public string FileExt { get; set; } + /// + /// 描述 : 创建人 + /// 空值 : true + /// + public string Create_by { get; set; } + /// + /// 描述 : 上传时间 + /// 空值 : true + /// + public DateTime? Create_time { get; set; } + /// + /// 描述 : 存储类型 + /// 空值 : true + /// + public int? StoreType { get; set; } + /// + /// 描述 : 访问路径 + /// 空值 : true + /// + 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; + } + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Model/System/SysLogininfor.cs b/ARW-net/ARW.Model/System/SysLogininfor.cs new file mode 100644 index 0000000..0f407be --- /dev/null +++ b/ARW-net/ARW.Model/System/SysLogininfor.cs @@ -0,0 +1,64 @@ +//using Dapper.Contrib.Extensions; +using OfficeOpenXml.Attributes; +using SqlSugar; +using System; + +namespace ARW.Model.System +{ + /// + /// sys_logininfor 表 + /// + [SugarTable("sys_logininfor")] + [Tenant("0")] + public class SysLogininfor + { + //[Key] + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + public long infoId { get; set; } + + /// + /// 用户账号 + /// + public string userName { get; set; } + + /// + /// 登录状态 0成功 1失败 + /// + [SugarColumn(Length = 1)] + public string status { get; set; } + + /// + /// 登录IP地址 + /// + public string ipaddr { get; set; } + + /// + /// 登录地点 + /// + public string loginLocation { get; set; } + + /// + /// 浏览器类型 + /// + public string browser { get; set; } + + /** 操作系统 */ + //@Excel(name = "操作系统") + public string os { get; set; } + + /// + /// 提示消息 + /// + public string msg { get; set; } + + /// + /// 访问时间 + /// + [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; } + } +} diff --git a/ARW-net/ARW.Model/System/SysMenu.cs b/ARW-net/ARW.Model/System/SysMenu.cs new file mode 100644 index 0000000..cb50b46 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysMenu.cs @@ -0,0 +1,107 @@ +using SqlSugar; +using System.Collections.Generic; + +namespace ARW.Model.System +{ + /// + /// Sys_menu表 + /// + [SugarTable("sys_menu")] + [Tenant("0")] + public class SysMenu : SysBase + { + /// + /// 菜单ID + /// + //[Key]//非自动增长主键时使用ExplicitKey + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + public long MenuId { get; set; } + /// + /// 菜单名称 + /// + public string MenuName { get; set; } + + /// + /// 父菜单ID + /// + public long parentId { get; set; } + + /// + /// 显示顺序 + /// + public int orderNum { get; set; } + + /// + /// 路由地址 + /// + public string path { get; set; } = "#"; + + /// + /// 组件路径 + /// + [SugarColumn(IsNullable = true)] + public string component { get; set; } + + /// + /// 是否缓存(1缓存 0不缓存) + /// + public string isCache { get; set; } + /// + /// 是否外链 1、是 0、否 + /// + public string isFrame { get; set; } + + /// + /// 类型(M目录 C菜单 F按钮 L链接) + /// + public string menuType { get; set; } + + /// + /// 显示状态(0显示 1隐藏) + /// + public string visible { get; set; } + + /// + /// 菜单状态(0正常 1停用) + /// + public string status { get; set; } + + /// + /// 权限字符串 + /// + [SugarColumn(IsNullable = true)] + public string perms { get; set; } + + /// + /// 菜单图标 + /// + [SugarColumn(IsNullable = true)] + public string icon { get; set; } = string.Empty; + /// + /// 菜单名key + /// + [SugarColumn(ColumnName = "menuName_key", IsNullable = true)] + public string MenuNameKey { get; set; } + /// + /// 子菜单 + /// + [SugarColumn(IsIgnore = true)] + public List children { get; set; } = new List(); + /// + /// 子菜单个数 + /// + [SugarColumn(IsIgnore = true)] + public int SubNum { get; set; } + /// + /// 是否包含子节点,前端用 + /// + [SugarColumn(IsIgnore = true)] + public bool HasChildren + { + get + { + return SubNum > 0 || children.Count > 0; + } + } + } +} diff --git a/ARW-net/ARW.Model/System/SysNotice.cs b/ARW-net/ARW.Model/System/SysNotice.cs new file mode 100644 index 0000000..a91b285 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysNotice.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using SqlSugar; + +namespace ARW.Model.System +{ + /// + /// 通知公告表,数据实体对象 + /// + /// @author zr + /// @date 2021-12-15 + /// + [SugarTable("sys_notice")] + [Tenant(0)] + public class SysNotice : SysBase + { + /// + /// 描述 : 公告ID + /// 空值 : true + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "notice_id")] + public int NoticeId { get; set; } + /// + /// 描述 : 公告标题 + /// 空值 : true + /// + [SugarColumn(ColumnName = "notice_title")] + public string NoticeTitle { get; set; } + /// + /// 描述 : 公告类型 (1通知 2公告) + /// 空值 : true + /// + [SugarColumn(ColumnName = "notice_type")] + public string NoticeType { get; set; } + /// + /// 描述 : 公告内容 + /// 空值 : true + /// + [SugarColumn(ColumnName = "notice_content")] + public string NoticeContent { get; set; } + /// + /// 描述 : 公告状态 (0正常 1关闭) + /// 空值 : true + /// + public string Status { get; set; } + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Model/System/SysOperLog.cs b/ARW-net/ARW.Model/System/SysOperLog.cs new file mode 100644 index 0000000..871baa5 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysOperLog.cs @@ -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; } + + /// + /// 错误消息 + /// + [EpplusTableColumn(Header = "错误消息")] + public string errorMsg { get; set; } + + /// + /// 操作时间 + /// + [EpplusTableColumn(Header = "操作时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")] + public DateTime? operTime { get; set; } + /// + /// 操作用时 + /// + public long Elapsed { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/SysPost.cs b/ARW-net/ARW.Model/System/SysPost.cs new file mode 100644 index 0000000..4bfd544 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysPost.cs @@ -0,0 +1,22 @@ +using OfficeOpenXml.Attributes; +using SqlSugar; + +namespace ARW.Model.System +{ + [SugarTable("sys_post")] + [Tenant("0")] + public class SysPost : SysBase + { + /// + /// 岗位Id + /// + [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; } + } +} diff --git a/ARW-net/ARW.Model/System/SysRole.cs b/ARW-net/ARW.Model/System/SysRole.cs new file mode 100644 index 0000000..f8e9523 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysRole.cs @@ -0,0 +1,94 @@ +using Newtonsoft.Json; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Model.System +{ + /// + /// 角色表 sys_role + /// + [SugarTable("sys_role")] + [Tenant("0")] + public class SysRole : SysBase + { + /// + /// 角色ID + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + public long RoleId { get; set; } + + /// + /// 角色名称 + /// + public string RoleName { get; set; } + + /// + /// 角色权限 + /// + public string RoleKey { get; set; } + + /// + /// 角色排序 + /// + public int RoleSort { get; set; } + + /// + /// 帐号状态(0正常 1停用) + /// + public string Status { get; set; } + + /// + /// 删除标志(0代表存在 2代表删除) + /// + [SugarColumn(IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)] + public string DelFlag { get; set; } + /// + /// 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)) + /// + public string DataScope { get; set; } + /// + /// 菜单树选择项是否关联显示 + /// + [SugarColumn(ColumnName = "menu_check_strictly")] + public bool MenuCheckStrictly { get; set; } + /// + /// 部门树选择项是否关联显示 + /// + [SugarColumn(ColumnName = "dept_check_strictly")] + public bool DeptCheckStrictly { get; set; } + /// + /// 菜单组 + /// + [SugarColumn(IsIgnore = true)] + public long[] MenuIds { get; set; } + /// + /// 部门组(数据权限) + /// + [SugarColumn(IsIgnore = true)] + public long[] DeptIds { get; set; } + /// + /// 用户个数 + /// + [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; + } + } +} diff --git a/ARW-net/ARW.Model/System/SysRoleDept.cs b/ARW-net/ARW.Model/System/SysRoleDept.cs new file mode 100644 index 0000000..4b5629b --- /dev/null +++ b/ARW-net/ARW.Model/System/SysRoleDept.cs @@ -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; } + } +} diff --git a/ARW-net/ARW.Model/System/SysRoleMenu.cs b/ARW-net/ARW.Model/System/SysRoleMenu.cs new file mode 100644 index 0000000..fc09ce0 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysRoleMenu.cs @@ -0,0 +1,25 @@ +using Newtonsoft.Json; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Model.System +{ + /// + /// 角色菜单 + /// + [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; } + } +} diff --git a/ARW-net/ARW.Model/System/SysRolePost.cs b/ARW-net/ARW.Model/System/SysRolePost.cs new file mode 100644 index 0000000..47fd843 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysRolePost.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; +using SqlSugar; + +namespace ARW.Model.System +{ + /// + /// 角色部门 + /// + [SugarTable("sys_role_post")] + [Tenant("0")] + public class SysRolePost + { + public long RoleId { get; set; } + public long DeptId { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/SysTasksLog.cs b/ARW-net/ARW.Model/System/SysTasksLog.cs new file mode 100644 index 0000000..3e8bece --- /dev/null +++ b/ARW-net/ARW.Model/System/SysTasksLog.cs @@ -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 +{ + /// + /// 任务日志 + /// + [SugarTable("sys_tasks_log")] + [Tenant("0")] + public class SysTasksLog + { + /// + /// 日志Id + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsIdentity = true, IsPrimaryKey = true)] + public long JobLogId { get; set; } + /// + /// 任务Id + /// + public string JobId { get; set; } + public string JobName { get; set; } + public string JobGroup { get; set; } + /// + /// 执行状态(0正常 1失败) + /// + public string Status { get; set; } + /// + /// 异常 + /// + public string Exception { get; set; } + /// + /// + /// + public string JobMessage { get; set; } + /// + /// 调用目标字符串 + /// + public string InvokeTarget { get; set; } + + [EpplusTableColumn(NumberFormat = "yyyy-MM-dd HH:mm:ss")] + public DateTime CreateTime { get; set; } + /// + /// 执行用时,毫秒 + /// + //[SqlSugar.SugarColumn(IsIgnore = true)] + public double Elapsed { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/SysTasksQz.cs b/ARW-net/ARW.Model/System/SysTasksQz.cs new file mode 100644 index 0000000..6374782 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysTasksQz.cs @@ -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 +{ + /// + ///计划任务 + /// + [SugarTable("sys_tasks")] + [Tenant("0")] + public class SysTasksQz + { + public SysTasksQz() + { + } + + /// + /// 描述 : UID + /// 空值 : False + /// 默认 : + /// + [Display(Name = "UID")] + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true,IsIdentity =true)] + public int ID { get; set; } + + /// + /// 描述 : 任务名称 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "任务名称")] + public string Name { get; set; } + + /// + /// 描述 : 任务分组 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "任务分组")] + public string JobGroup { get; set; } + + /// + /// 描述 : 运行时间表达式 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "运行时间表达式")] + public string Cron { get; set; } + + /// + /// 描述 : 程序集名称 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "程序集名称")] + public string AssemblyName { get; set; } + + /// + /// 描述 : 任务所在类 + /// 空值 : False + /// 默认 : + /// + [Display(Name = "任务所在类")] + public string ClassName { get; set; } + + /// + /// 描述 : 任务描述 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "任务描述")] + public string Remark { get; set; } + + /// + /// 描述 : 执行次数 + /// 空值 : False + /// 默认 : 0 + /// + [Display(Name = "执行次数")] + public int RunTimes { get; set; } + + /// + /// 描述 : 开始时间 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "开始时间")] + public DateTime? BeginTime { get; set; } + + /// + /// 描述 : 结束时间 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "结束时间")] + public DateTime? EndTime { get; set; } + + /// + /// 描述 : 触发器类型(0、simple 1、cron) + /// 空值 : False + /// 默认 : 1 + /// + [Display(Name = "触发器类型(0、simple 1、cron)")] + public int TriggerType { get; set; } + + /// + /// 描述 : 执行间隔时间(单位:秒) + /// 空值 : False + /// 默认 : 0 + /// + [Display(Name = "执行间隔时间(单位:秒)")] + public int IntervalSecond { get; set; } + + /// + /// 描述 : 是否启动 + /// 空值 : False + /// 默认 : 0 + /// + [Display(Name = "是否启动")] + public bool IsStart { get; set; } + + /// + /// 描述 : 传入参数 + /// 空值 : True + /// 默认 : + /// + [Display(Name = "传入参数")] + public string JobParams { get; set; } + + [SugarColumn(IsOnlyIgnoreUpdate = true)]//设置后修改不会有此字段 + [JsonProperty(propertyName: "CreateBy")] + public string Create_by { get; set; } + + /// + /// 描述 : 创建时间 + /// 空值 : False + /// 默认 : + /// + //[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; + /// + /// 最后运行时间 + /// + public DateTime? LastRunTime { get; set; } + /// + /// api执行地址 + /// + public string ApiUrl { get; set; } + /// + /// 任务类型 1程序集2网络请求 + /// + public int TaskType { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/SysUser.cs b/ARW-net/ARW.Model/System/SysUser.cs new file mode 100644 index 0000000..890016f --- /dev/null +++ b/ARW-net/ARW.Model/System/SysUser.cs @@ -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 +{ + /// + /// 用户表 + /// + [SugarTable("sys_user")] + [Tenant("0")] + public class SysUser : SysBase + { + /// + /// 用户id + /// + [SugarColumn(IsIdentity = true, IsPrimaryKey = true)] + public long UserId { get; set; } + //[Duplication]//校验模板类该列数据是否重复 + public string UserName { get; set; } + public string NickName { get; set; } + /// + /// '用户类型(00系统用户)', + /// + //[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; } + /// + /// 手机号 + /// + public string Phonenumber { get; set; } + /// + /// 用户性别(0男 1女 2未知) + /// + public string Sex { get; set; } + + /// + /// 帐号状态(0正常 1停用) + /// + [EpplusIgnore] + public string Status { get; set; } + + /// + /// 删除标志(0代表存在 2代表删除) + /// + [SugarColumn(IsOnlyIgnoreInsert = true)] + public string DelFlag { get; set; } + + /// + /// 最后登录IP + /// + [SugarColumn(IsOnlyIgnoreInsert = true)] + public string LoginIP { get; set; } + + /// + /// 最后登录时间 + /// + [SugarColumn(IsOnlyIgnoreInsert = true)] + [EpplusTableColumn(NumberFormat = "yyyy-MM-dd HH:mm:ss")] + public DateTime LoginDate { get; set; } + + /// + /// 部门Id + /// + public long DeptId { get; set; } + + #region 表额外字段 + public bool IsAdmin() + { + return IsAdmin(UserId); + } + public static bool IsAdmin(long userId) + { + return 1 == userId; + } + + /// + /// 拥有角色个数 + /// + //[SugarColumn(IsIgnore = true)] + //public int RoleNum { get; set; } + [SugarColumn(IsIgnore = true)] + public string DeptName { get; set; } + /// + /// 角色id集合 + /// + [SugarColumn(IsIgnore = true)] + [EpplusIgnore] + public long[] RoleIds { get; set; } + /// + /// 岗位集合 + /// + [SugarColumn(IsIgnore = true)] + [EpplusIgnore] + public int[] PostIds { get; set; } + + [SugarColumn(IsIgnore = true)] + [EpplusIgnore] + public List 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 + } +} diff --git a/ARW-net/ARW.Model/System/SysUserPost.cs b/ARW-net/ARW.Model/System/SysUserPost.cs new file mode 100644 index 0000000..7ec3b59 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysUserPost.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; +using SqlSugar; + +namespace ARW.Model.System +{ + + /// + /// 用户岗位 + /// + [SugarTable("sys_user_post")] + [Tenant("0")] + public class SysUserPost + { + public long UserId { get; set; } + public long PostId { get; set; } + } +} diff --git a/ARW-net/ARW.Model/System/SysUserRole.cs b/ARW-net/ARW.Model/System/SysUserRole.cs new file mode 100644 index 0000000..eb80472 --- /dev/null +++ b/ARW-net/ARW.Model/System/SysUserRole.cs @@ -0,0 +1,21 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Model.System +{ + /// + /// 用户角色关联表 用户N-1 角色 + /// + [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; } + } +} diff --git a/ARW-net/ARW.Model/System/UserConstants.cs b/ARW-net/ARW.Model/System/UserConstants.cs new file mode 100644 index 0000000..ead0d74 --- /dev/null +++ b/ARW-net/ARW.Model/System/UserConstants.cs @@ -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"; + + /// + /// http请求 + /// + public static string HTTP = "http://"; + + /// + /// https请求 + /// + public static string HTTPS = "https://"; + } +} diff --git a/ARW-net/ARW.Model/System/Vo/LangVo.cs b/ARW-net/ARW.Model/System/Vo/LangVo.cs new file mode 100644 index 0000000..2479012 --- /dev/null +++ b/ARW-net/ARW.Model/System/Vo/LangVo.cs @@ -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 + { + + } +} diff --git a/ARW-net/ARW.Model/System/Vo/RouterVo.cs b/ARW-net/ARW.Model/System/Vo/RouterVo.cs new file mode 100644 index 0000000..4bb9441 --- /dev/null +++ b/ARW-net/ARW.Model/System/Vo/RouterVo.cs @@ -0,0 +1,70 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Model.System.Vo +{ + /// + /// 路由展示 + /// + 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 Children { get; set; } + public string Component { get => component; set => component = value; } + } + + public class Meta + { + /// + /// 设置该路由在侧边栏和面包屑中展示的名字 + /// + public string Title { get; set; } + /// + /// 设置该路由的图标,对应路径src/assets/icons/svg + /// + public string Icon { get; set; } + /// + /// 设置为true,则不会被 缓存 + /// + 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; + } + } +} diff --git a/ARW-net/ARW.Model/System/Vo/TreeSelectVo.cs b/ARW-net/ARW.Model/System/Vo/TreeSelectVo.cs new file mode 100644 index 0000000..75234c2 --- /dev/null +++ b/ARW-net/ARW.Model/System/Vo/TreeSelectVo.cs @@ -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 +{ + /// + /// Treeselect树结构实体类 + /// + public class TreeSelectVo + { + /// + /// 节点Id + /// + public long Id { get; set; } + /// + /// 节点名称 + /// + 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 child = new List(); + 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 child = new List(); + foreach (var item in dept.children) + { + child.Add(new TreeSelectVo(item)); + } + + Children = child; + } + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public List Children { get; set; } + } +} diff --git a/ARW-net/ARW.Model/Vo/Chat/ChatApplyRequestVo.cs b/ARW-net/ARW.Model/Vo/Chat/ChatApplyRequestVo.cs new file mode 100644 index 0000000..21cf40e --- /dev/null +++ b/ARW-net/ARW.Model/Vo/Chat/ChatApplyRequestVo.cs @@ -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; } + + } +} diff --git a/ARW-net/ARW.Model/Vo/Chat/ChatGPT/ChatGPTLogVo.cs b/ARW-net/ARW.Model/Vo/Chat/ChatGPT/ChatGPTLogVo.cs new file mode 100644 index 0000000..d556ef2 --- /dev/null +++ b/ARW-net/ARW.Model/Vo/Chat/ChatGPT/ChatGPTLogVo.cs @@ -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; } + + //} + +} diff --git a/ARW-net/ARW.Model/Vo/Chat/ChatLogVo.cs b/ARW-net/ARW.Model/Vo/Chat/ChatLogVo.cs new file mode 100644 index 0000000..7e283cf --- /dev/null +++ b/ARW-net/ARW.Model/Vo/Chat/ChatLogVo.cs @@ -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; } + + } + +} diff --git a/ARW-net/ARW.Model/Vo/Chat/ChatUserVo.cs b/ARW-net/ARW.Model/Vo/Chat/ChatUserVo.cs new file mode 100644 index 0000000..4c69f98 --- /dev/null +++ b/ARW-net/ARW.Model/Vo/Chat/ChatUserVo.cs @@ -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; } + } +} diff --git a/ARW-net/ARW.Model/Vo/Chat/FriendsVo.cs b/ARW-net/ARW.Model/Vo/Chat/FriendsVo.cs new file mode 100644 index 0000000..8566a4c --- /dev/null +++ b/ARW-net/ARW.Model/Vo/Chat/FriendsVo.cs @@ -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; } + + } +} diff --git a/ARW-net/ARW.Model/Vo/Chat/GroupVo.cs b/ARW-net/ARW.Model/Vo/Chat/GroupVo.cs new file mode 100644 index 0000000..33f75c2 --- /dev/null +++ b/ARW-net/ARW.Model/Vo/Chat/GroupVo.cs @@ -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; } + } +} diff --git a/ARW-net/ARW.Model/Vo/Crawler/CrawlVo.cs b/ARW-net/ARW.Model/Vo/Crawler/CrawlVo.cs new file mode 100644 index 0000000..cfaeab6 --- /dev/null +++ b/ARW-net/ARW.Model/Vo/Crawler/CrawlVo.cs @@ -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 DownResources { get; set; } + + public string Resources + { + get + { + if (this.DownResources != null) + { + return JToken.FromObject(this.DownResources).ToString(); + } + else + { + return "[]"; + } + + } + } + } + +} diff --git a/ARW-net/ARW.Model/Vo/ProductTypeVo.cs b/ARW-net/ARW.Model/Vo/ProductTypeVo.cs new file mode 100644 index 0000000..849cfc0 --- /dev/null +++ b/ARW-net/ARW.Model/Vo/ProductTypeVo.cs @@ -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 Children { get; set; } + + } +} diff --git a/ARW-net/ARW.Model/Vo/StudentVo.cs b/ARW-net/ARW.Model/Vo/StudentVo.cs new file mode 100644 index 0000000..ea8e45c --- /dev/null +++ b/ARW-net/ARW.Model/Vo/StudentVo.cs @@ -0,0 +1,47 @@ +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; + +namespace ARW.Model.Vo +{ + public class StudentVo + { + [EpplusTableColumn(Header = "学生Id")] + [JsonConverter(typeof(ValueToStringConverter))] + public long StudentId { get; set; } + + [EpplusTableColumn(Header = "班级Id")] + [JsonConverter(typeof(ValueToStringConverter))] + public long ClassId { get; set; } + + [EpplusTableColumn(Header = "班级名称")] + public string ClassName { get; set; } + + [EpplusTableColumn(Header = "学生名称")] + public string StudentName { get; set; } + + [EpplusTableColumn(Header = "学生性别")] + public string Sex { get; set; } + + [EpplusTableColumn(Header = "学生年龄")] + public int? Age { get; set; } + + [EpplusTableColumn(Header = "学生图片")] + public string StudentImg { get; set; } + + [EpplusTableColumn(Header = "学生标签")] + public string StudentTag { get; set; } + + [EpplusTableColumn(Header = "学生服务")] + public string StudentService { get; set; } + + [EpplusTableColumn(Header = "学生描述")] + public string StudentDescribe { get; set; } + } +} diff --git a/ARW-net/ARW.Repository/ARW.Repository.csproj b/ARW-net/ARW.Repository/ARW.Repository.csproj new file mode 100644 index 0000000..65dbefc --- /dev/null +++ b/ARW-net/ARW.Repository/ARW.Repository.csproj @@ -0,0 +1,24 @@ + + + + net6.0 + ARW.Repository + ARW.Repository + + + + + + + + + + + + + + + + + + diff --git a/ARW-net/ARW.Repository/BaseRepository.cs b/ARW-net/ARW.Repository/BaseRepository.cs new file mode 100644 index 0000000..4a3beb4 --- /dev/null +++ b/ARW-net/ARW.Repository/BaseRepository.cs @@ -0,0 +1,387 @@ +using SqlSugar; +using SqlSugar.IOC; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq.Expressions; +using System.Reflection; +using ARW.Model; +using ARW.Model.Models.Business.Crawler; +using System.Threading.Tasks; + +namespace ARW.Repository +{ + /// + /// + /// + /// + public class BaseRepository : SimpleClient where T : class, new() + { + public ITenant itenant = null;//多租户事务 + public BaseRepository(ISqlSugarClient context = null) : base(context) + { + //通过特性拿到ConfigId + var configId = typeof(T).GetCustomAttribute()?.configId; + if (configId != null) + { + Context = DbScoped.SugarScope.GetConnectionScope(configId);//根据类传入的ConfigId自动选择 + } + else + { + Context = context ?? DbScoped.SugarScope.GetConnectionScope(0);//没有默认db0 + } + //Context = DbScoped.SugarScope.GetConnectionScopeWithAttr(); + itenant = DbScoped.SugarScope;//设置租户接口 + } + + #region add + + /// + /// 插入实体 + /// + /// + /// + public int Add(T t) + { + return Context.Insertable(t).IgnoreColumns(true).ExecuteCommand(); + } + + public long AddGuid(T t) + { + return Context.Insertable(t).IgnoreColumns(true).ExecuteReturnSnowflakeId(); + } + + public int Insert(List t) + { + return Context.Insertable(t).ExecuteCommand(); + } + public int Insert(T parm, Expression> iClumns = null, bool ignoreNull = true) + { + return Context.Insertable(parm).InsertColumns(iClumns).IgnoreColumns(ignoreNullColumn: ignoreNull).ExecuteCommand(); + } + public IInsertable Insertable(T t) + { + return Context.Insertable(t); + } + #endregion add + + #region update + public IUpdateable Updateable(T entity) + { + return Context.Updateable(entity); + } + public int Update(T entity, bool ignoreNullColumns = false) + { + return Context.Updateable(entity).IgnoreColumns(ignoreNullColumns).ExecuteCommand(); + } + + public int Update(T entity, Expression> expression, bool ignoreAllNull = false) + { + return Context.Updateable(entity).UpdateColumns(expression).IgnoreColumns(ignoreAllNull).ExecuteCommand(); + } + + /// + /// 根据实体类更新指定列 eg:Update(dept, it => new { it.Status }, f => depts.Contains(f.DeptId));只更新Status列,条件是包含 + /// + /// + /// + /// + /// + public int Update(T entity, Expression> expression, Expression> where) + { + return Context.Updateable(entity).UpdateColumns(expression).Where(where).ExecuteCommand(); + } + + public int Update(SqlSugarClient client, T entity, Expression> expression, Expression> where) + { + return client.Updateable(entity).UpdateColumns(expression).Where(where).ExecuteCommand(); + } + + /// + /// + /// + /// + /// + /// 默认为true + /// + public int Update(T entity, List list = null, bool isNull = true) + { + if (list == null) + { + list = new List() + { + "Create_By", + "Create_time" + }; + } + return Context.Updateable(entity).IgnoreColumns(isNull).IgnoreColumns(list.ToArray()).ExecuteCommand(); + } + + //public bool Update(List entity) + //{ + // var result = base.Context.Ado.UseTran(() => + // { + // base.Context.Updateable(entity).ExecuteCommand(); + // }); + // return result.IsSuccess; + //} + + /// + /// 更新指定列 eg:Update(w => w.NoticeId == model.NoticeId, it => new SysNotice(){ Update_time = DateTime.Now, Title = "通知标题" }); + /// + /// + /// + /// + public int Update(Expression> where, Expression> columns) + { + return Context.Updateable().SetColumns(columns).Where(where).RemoveDataCache().ExecuteCommand(); + } + #endregion update + + public DbResult UseTran(Action action) + { + try + { + var result = Context.Ado.UseTran(() => action()); + return result; + } + catch (Exception ex) + { + Context.Ado.RollbackTran(); + Console.WriteLine(ex.Message); + throw; + } + } + public IStorageable Storageable(T t) + { + return Context.Storageable(t); + } + public IStorageable Storageable(List t) + { + return Context.Storageable(t); + } + /// + /// + /// + /// + /// 增删改查方法 + /// + public DbResult UseTran(SqlSugarClient client, Action action) + { + try + { + var result = client.AsTenant().UseTran(() => action()); + return result; + } + catch (Exception ex) + { + client.AsTenant().RollbackTran(); + Console.WriteLine(ex.Message); + throw; + } + } + + public bool UseTran2(Action action) + { + var result = Context.Ado.UseTran(() => action()); + return result.IsSuccess; + } + + #region delete + public IDeleteable Deleteable() + { + return Context.Deleteable(); + } + + /// + /// 批量删除 + /// + /// + /// + public int Delete(object[] obj) + { + return Context.Deleteable().In(obj).ExecuteCommand(); + } + public int Delete(object id) + { + return Context.Deleteable(id).IsLogic().ExecuteCommand(); + } + public int DeleteTable() + { + return Context.Deleteable().ExecuteCommand(); + } + + #endregion delete + + #region query + + public bool Any(Expression> expression) + { + return Context.Queryable().Where(expression).Any(); + } + + public ISugarQueryable Queryable() + { + return Context.Queryable(); + } + + public (List, int) QueryableToPage(Expression> expression, int pageIndex = 0, int pageSize = 10) + { + int totalNumber = 0; + var list = Context.Queryable().Where(expression).ToPageList(pageIndex, pageSize, ref totalNumber); + return (list, totalNumber); + } + + public (List, int) QueryableToPage(Expression> expression, string order, int pageIndex = 0, int pageSize = 10) + { + int totalNumber = 0; + var list = Context.Queryable().Where(expression).OrderBy(order).ToPageList(pageIndex, pageSize, ref totalNumber); + return (list, totalNumber); + } + + public (List, int) QueryableToPage(Expression> expression, Expression> orderFiled, string orderBy, int pageIndex = 0, int pageSize = 10) + { + int totalNumber = 0; + + if (orderBy.Equals("DESC", StringComparison.OrdinalIgnoreCase)) + { + var list = Context.Queryable().Where(expression).OrderBy(orderFiled, OrderByType.Desc).ToPageList(pageIndex, pageSize, ref totalNumber); + return (list, totalNumber); + } + else + { + var list = Context.Queryable().Where(expression).OrderBy(orderFiled, OrderByType.Asc).ToPageList(pageIndex, pageSize, ref totalNumber); + return (list, totalNumber); + } + } + + public List SqlQueryToList(string sql, object obj = null) + { + return Context.Ado.SqlQuery(sql, obj); + } + + /// + /// 根据主值查询单条数据 + /// + /// 主键值 + /// 泛型实体 + public T GetId(object pkValue) + { + return Context.Queryable().InSingle(pkValue); + } + /// + /// 根据条件查询分页数据 + /// + /// + /// + /// + public PagedInfo GetPages(Expression> where, PagerInfo parm) + { + var source = Context.Queryable().Where(where); + + return source.ToPage(parm); + } + + public PagedInfo GetPages(Expression> where, PagerInfo parm, Expression> order, OrderByType orderEnum = OrderByType.Asc) + { + var source = Context.Queryable().Where(where).OrderByIF(orderEnum == OrderByType.Asc, order, OrderByType.Asc).OrderByIF(orderEnum == OrderByType.Desc, order, OrderByType.Desc); + + return source.ToPage(parm); + } + + public PagedInfo GetPages(Expression> where, PagerInfo parm, Expression> order, string orderByType) + { + return GetPages(where, parm, order, orderByType == "desc" ? OrderByType.Desc : OrderByType.Asc); + } + + /// + /// 查询所有数据(无分页,请慎用) + /// + /// + public List GetAll(bool useCache = false, int cacheSecond = 3600) + { + return Context.Queryable().WithCacheIF(useCache, cacheSecond).ToList(); + } + + #endregion query + + /// + /// 此方法不带output返回值 + /// var list = new List(); + /// list.Add(new SugarParameter(ParaName, ParaValue)); input + /// + /// + /// + /// + public DataTable UseStoredProcedureToDataTable(string procedureName, List parameters) + { + return Context.Ado.UseStoredProcedure().GetDataTable(procedureName, parameters); + } + + /// + /// 带output返回值 + /// var list = new List(); + /// list.Add(new SugarParameter(ParaName, ParaValue, true)); output + /// list.Add(new SugarParameter(ParaName, ParaValue)); input + /// + /// + /// + /// + public (DataTable, List) UseStoredProcedureToTuple(string procedureName, List parameters) + { + var result = (Context.Ado.UseStoredProcedure().GetDataTable(procedureName, parameters), parameters); + return result; + } + } + + /// + /// 分页查询扩展 + /// + public static class QueryableExtension + { + /// + /// 读取列表 + /// + /// + /// 查询表单式 + /// 分页参数 + /// + public static PagedInfo ToPage(this ISugarQueryable source, PagerInfo parm) + { + var page = new PagedInfo(); + var total = 0; + page.PageSize = parm.PageSize; + page.PageIndex = parm.PageNum; + + page.Result = source.OrderByIF(!string.IsNullOrEmpty(parm.Sort), $"{parm.Sort} {(parm.SortType.Contains("desc") ? "desc" : "asc")}") + .ToPageList(parm.PageNum, parm.PageSize, ref total); + page.TotalNum = total; + return page; + } + + + /// + /// 读取列表(异步) + /// + /// + /// 查询表单式 + /// 分页参数 + /// + public static async Task> ToPageAsync(this ISugarQueryable source, PagerInfo parm) + { + var page = new PagedInfo(); + var total = 0; + page.PageSize = parm.PageSize; + page.PageIndex = parm.PageNum; + + page.Result = source.OrderByIF(!string.IsNullOrEmpty(parm.Sort), $"{parm.Sort} {(parm.SortType.Contains("desc") ? "desc" : "asc")}") + .ToPageList(parm.PageNum, parm.PageSize, ref total); + page.TotalNum = total; + return page; + } + + } + + + +} diff --git a/ARW-net/ARW.Repository/Business/Chat/ChatApplyRepository.cs b/ARW-net/ARW.Repository/Business/Chat/ChatApplyRepository.cs new file mode 100644 index 0000000..5929045 --- /dev/null +++ b/ARW-net/ARW.Repository/Business/Chat/ChatApplyRepository.cs @@ -0,0 +1,25 @@ +using Infrastructure.Attribute; +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.Chat; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Model.Chat; + +namespace ARW.Repository.Business.Chat +{ + /// + /// 仓储服务 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class ChatApplyRepository : BaseRepository + { + /* + * 复杂的业务逻辑代码 + */ + } +} diff --git a/ARW-net/ARW.Repository/Business/Chat/ChatGPT/ChatGPTLogRepository.cs b/ARW-net/ARW.Repository/Business/Chat/ChatGPT/ChatGPTLogRepository.cs new file mode 100644 index 0000000..d79fd29 --- /dev/null +++ b/ARW-net/ARW.Repository/Business/Chat/ChatGPT/ChatGPTLogRepository.cs @@ -0,0 +1,26 @@ +using Infrastructure.Attribute; +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.Chat; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Model.Chat; +using ARW.Model.Models.Business.Chat.ChatGPT; + +namespace ARW.Repository.Business.Chat.ChatGPT +{ + /// + /// 仓储服务 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class ChatGPTLogRepository : BaseRepository + { + /* + * 复杂的业务逻辑代码 + */ + } +} diff --git a/ARW-net/ARW.Repository/Business/Chat/ChatLogRepository.cs b/ARW-net/ARW.Repository/Business/Chat/ChatLogRepository.cs new file mode 100644 index 0000000..f219a5d --- /dev/null +++ b/ARW-net/ARW.Repository/Business/Chat/ChatLogRepository.cs @@ -0,0 +1,25 @@ +using Infrastructure.Attribute; +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.Chat; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Model.Chat; + +namespace ARW.Repository.Business.Chat +{ + /// + /// 仓储服务 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class ChatLogRepository : BaseRepository + { + /* + * 复杂的业务逻辑代码 + */ + } +} diff --git a/ARW-net/ARW.Repository/Business/Chat/ChatRepository.cs b/ARW-net/ARW.Repository/Business/Chat/ChatRepository.cs new file mode 100644 index 0000000..260f1ba --- /dev/null +++ b/ARW-net/ARW.Repository/Business/Chat/ChatRepository.cs @@ -0,0 +1,30 @@ +using Infrastructure.Attribute; +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.Chat; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Model.Chat; + +namespace ARW.Repository.Business.Chat +{ + /// + /// 仓储服务 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class ChatRepository : BaseRepository + { + /* + * 复杂的业务逻辑代码 + */ + + public ChatUser Login(ChatUserDto user) + { + return Context.Queryable().First(it => it.ChatUserName == user.ChatUserName && it.Password == user.Password); + } + } +} diff --git a/ARW-net/ARW.Repository/Business/Chat/FriendsRepository.cs b/ARW-net/ARW.Repository/Business/Chat/FriendsRepository.cs new file mode 100644 index 0000000..a2ab94b --- /dev/null +++ b/ARW-net/ARW.Repository/Business/Chat/FriendsRepository.cs @@ -0,0 +1,25 @@ +using Infrastructure.Attribute; +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.Chat; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Model.Chat; + +namespace ARW.Repository.Business.Chat +{ + /// + /// 仓储服务 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class FriendsRepository : BaseRepository + { + /* + * 复杂的业务逻辑代码 + */ + } +} diff --git a/ARW-net/ARW.Repository/Business/Chat/GroupRepository.cs b/ARW-net/ARW.Repository/Business/Chat/GroupRepository.cs new file mode 100644 index 0000000..86ccbab --- /dev/null +++ b/ARW-net/ARW.Repository/Business/Chat/GroupRepository.cs @@ -0,0 +1,25 @@ +using Infrastructure.Attribute; +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.Chat; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Model.Chat; + +namespace ARW.Repository.Business.Chat +{ + /// + /// 仓储服务 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class GroupRepository : BaseRepository + { + /* + * 复杂的业务逻辑代码 + */ + } +} diff --git a/ARW-net/ARW.Repository/Business/Chat/GroupUserRepository.cs b/ARW-net/ARW.Repository/Business/Chat/GroupUserRepository.cs new file mode 100644 index 0000000..20047e6 --- /dev/null +++ b/ARW-net/ARW.Repository/Business/Chat/GroupUserRepository.cs @@ -0,0 +1,25 @@ +using Infrastructure.Attribute; +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.Chat; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Model.Chat; + +namespace ARW.Repository.Business.Chat +{ + /// + /// 仓储服务 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class GroupUserRepository : BaseRepository + { + /* + * 复杂的业务逻辑代码 + */ + } +} diff --git a/ARW-net/ARW.Repository/Business/ClassRepository.cs b/ARW-net/ARW.Repository/Business/ClassRepository.cs new file mode 100644 index 0000000..3d5654a --- /dev/null +++ b/ARW-net/ARW.Repository/Business/ClassRepository.cs @@ -0,0 +1,21 @@ +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model.Models.Business; + +namespace ARW.Repository.Business +{ + /// + /// 学生仓储服务 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class ClassRepository : BaseRepository + { + /* + * 复杂的业务逻辑代码 + */ + } +} diff --git a/ARW-net/ARW.Repository/Business/Crawler/CrawlRepository.cs b/ARW-net/ARW.Repository/Business/Crawler/CrawlRepository.cs new file mode 100644 index 0000000..a35eb4d --- /dev/null +++ b/ARW-net/ARW.Repository/Business/Crawler/CrawlRepository.cs @@ -0,0 +1,143 @@ +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model.Models.Business.Crawler; +using AngleSharp.Html.Parser; +using RestSharp; + +namespace ARW.Repository.Business +{ + /// + /// 爬虫仓储服务 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class CrawlRepository : BaseRepository + { + protected static HtmlParser htmlParser = new HtmlParser(); + + + // 不羞涩 + public string LoadBuxiuseHTML(string url) + { + try + { + var client = new RestClient(url); + var request = new RestRequest("https://www.buxiuse.com/", Method.Get); + request.AddHeader("cookie", "SESSION=YmNhNjgxNTctNzk3MS00YTVkLThmM2YtMDBjYzhjZDNiNzNm; Hm_lvt_479b5d690f3b5d1eae450ce953f78480=1660291808,1660530399; Hm_lpvt_479b5d690f3b5d1eae450ce953f78480=1660530399"); + request.AddHeader("accept-encoding", "gzip, deflate, br"); + request.AddHeader("accept", "application/json, text/javascript, */*; q=0.01"); + request.AddHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"); + request.AddHeader("upgrade-insecure-requests", "1"); + request.AddHeader("referer", "https://www.buxiuse.com/"); + request.AddHeader("cache-control", "max-age=0,no-cache"); + request.AddHeader("authority", "www.buxiuse.com"); + RestResponse response = client.Execute(request); + return response.IsSuccessful ? response.Content : ""; + + } + catch (Exception ex) + { + Console.WriteLine($"LoadHTML fail,url:{url},ex:{ex.ToString()}"); + + return string.Empty; + } + } + public int ParseBuxiusePic(string html) + { + var dom = htmlParser.ParseDocument(html); + var movies = new List(); + var lis = dom.QuerySelectorAll(".panel-body li"); + foreach (var li in lis) + { + + var onlineURL = "https://www.buxiuse.com" + li.QuerySelector("a").GetAttribute("href"); + var movie = new Crawl() + { + Name = li.QuerySelector("img").GetAttribute("title"), + Cover = li.QuerySelector("img").GetAttribute("src"), + Link = onlineURL, + Type = "图片", + PublishTime = DateTime.Now, + }; + //Context.Insertable(movie).ExecuteReturnIdentity(); + Add(movie); + movies.Add(movie); + } + + if (movies.Count == 0) + return 0; + else + return 1; + } + + + // Yellow片 + public string LoadYellowHTML(string url) + { + try + { + var client = new RestClient(url); + var request = new RestRequest(url, Method.Get); + request.AddHeader("cookie", "Hm_lvt_07f2c7e5bd9592209d606f0184fc3d8f=1660568257; recente=%5B%7B%22vod_name%22%3A%22%E5%9B%BD%E4%BA%A7AV%E5%89%A7%E6%83%85-%E4%B8%88%E5%A4%AB%E7%9A%84%22%2C%22vod_url%22%3A%22https%3A%2F%2Frra5ii1x6k3in.com%3A58002%2Findex.php%2Fvod%2Fplay%2Fid%2F138577%2Fsid%2F1%2Fnid%2F1.html%22%2C%22vod_part%22%3A%22%E7%AC%AC1%E9%9B%86%22%7D%5D; Hm_lvt_36ab7abfe863c7133f2af34068ebfc82=1660568383; Hm_lpvt_36ab7abfe863c7133f2af34068ebfc82=1660568383; Hm_lpvt_07f2c7e5bd9592209d606f0184fc3d8f=1660570678"); + request.AddHeader("accept-encoding", "gzip, deflate, br"); + request.AddHeader("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); + request.AddHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"); + request.AddHeader("upgrade-insecure-requests", "1"); + request.AddHeader("referer", url); + request.AddHeader("cache-control", "max-age=0"); + RestResponse response = client.Execute(request); + return response.IsSuccessful ? response.Content : ""; + } + catch (Exception ex) + { + Console.WriteLine($"LoadHTML fail,url:{url},ex:{ex.ToString()}"); + + return string.Empty; + } + } + public int ParseYellowPic(string html) + { + var dom = htmlParser.ParseDocument(html); + var movies = new List(); + var lis = dom.QuerySelectorAll(".stui-pannel_bd")?.SelectMany(div => div.QuerySelectorAll("li")); + foreach (var li in lis) + { + var onlineURL = "https://rra5ii1x6k3in.com:58002/" + li.QuerySelector("a").GetAttribute("href"); + var name = li.QuerySelector("a").GetAttribute("title"); + + string[] arr = { "福利姬","swag","丝" ,"jk","可爱","制服","网红"}; + + foreach (var item in arr) + { + if (name.Contains(item) == true) + { + var movie = new Crawl() + { + Name = name, + Link = onlineURL, + Type = "Yellow", + Cover = li.QuerySelector("a").GetAttribute("data-original"), + }; + Add(movie); + movies.Add(movie); + } + else + { + continue; + } + } + + } + + if (movies.Count == 0) + return 0; + else + return 1; + } + + + } +} diff --git a/ARW-net/ARW.Repository/Business/ProductTypeRepository.cs b/ARW-net/ARW.Repository/Business/ProductTypeRepository.cs new file mode 100644 index 0000000..b2a2d60 --- /dev/null +++ b/ARW-net/ARW.Repository/Business/ProductTypeRepository.cs @@ -0,0 +1,22 @@ +using Infrastructure.Attribute; +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.Product; + +namespace ARW.Repository.Business +{ + /// + /// 产品类型仓储服务 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class ProductTypeRepository : BaseRepository + { + /* + * 复杂的业务逻辑代码 + */ + } +} diff --git a/ARW-net/ARW.Repository/Business/StudentRepository.cs b/ARW-net/ARW.Repository/Business/StudentRepository.cs new file mode 100644 index 0000000..43c0d7d --- /dev/null +++ b/ARW-net/ARW.Repository/Business/StudentRepository.cs @@ -0,0 +1,21 @@ +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model.Models.Business; + +namespace ARW.Repository.Business +{ + /// + /// 学生仓储服务 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class StudentRepository : BaseRepository + { + /* + * 复杂的业务逻辑代码 + */ + } +} diff --git a/ARW-net/ARW.Repository/IBaseRepository.cs b/ARW-net/ARW.Repository/IBaseRepository.cs new file mode 100644 index 0000000..a8ccc88 --- /dev/null +++ b/ARW-net/ARW.Repository/IBaseRepository.cs @@ -0,0 +1,93 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq.Expressions; +using ARW.Model; + +namespace ARW.Repository +{ + public interface IBaseRepository : ISimpleClient where T : class, new() + { + #region add + int Add(T t); + + int Insert(List t); + int Insert(T parm, Expression> iClumns = null, bool ignoreNull = true); + + IInsertable Insertable(T t); + #endregion add + + #region update + IUpdateable Updateable(T entity); + int Update(T entity, bool ignoreNullColumns = false); + + /// + /// 只更新表达式的值 + /// + /// + /// + /// + int Update(T entity, Expression> expression, bool ignoreAllNull = false); + + int Update(T entity, Expression> expression, Expression> where); + + int Update(SqlSugarClient client, T entity, Expression> expression, Expression> where); + + int Update(Expression> where, Expression> columns); + + #endregion update + IStorageable Storageable(T t); + IStorageable Storageable(List t); + DbResult UseTran(Action action); + + DbResult UseTran(SqlSugarClient client, Action action); + + bool UseTran2(Action action); + + #region delete + IDeleteable Deleteable(); + int Delete(object[] obj); + int Delete(object id); + int DeleteTable(); + + #endregion delete + + #region query + /// + /// 根据条件查询分页数据 + /// + /// + /// + /// + PagedInfo GetPages(Expression> where, PagerInfo parm); + + PagedInfo GetPages(Expression> where, PagerInfo parm, Expression> order, OrderByType orderEnum = OrderByType.Asc); + PagedInfo GetPages(Expression> where, PagerInfo parm, Expression> order, string orderByType); + + bool Any(Expression> expression); + + ISugarQueryable Queryable(); + List GetAll(bool useCache = false, int cacheSecond = 3600); + + (List, int) QueryableToPage(Expression> expression, int pageIndex = 0, int pageSize = 10); + + (List, int) QueryableToPage(Expression> expression, string order, int pageIndex = 0, int pageSize = 10); + + (List, int) QueryableToPage(Expression> expression, Expression> orderFiled, string orderBy, int pageIndex = 0, int pageSize = 10); + + List SqlQueryToList(string sql, object obj = null); + + T GetId(object pkValue); + + #endregion query + + #region Procedure + + DataTable UseStoredProcedureToDataTable(string procedureName, List parameters); + + (DataTable, List) UseStoredProcedureToTuple(string procedureName, List parameters); + + #endregion Procedure + } +} diff --git a/ARW-net/ARW.Repository/System/CommonLangRepository.cs b/ARW-net/ARW.Repository/System/CommonLangRepository.cs new file mode 100644 index 0000000..435e6bf --- /dev/null +++ b/ARW-net/ARW.Repository/System/CommonLangRepository.cs @@ -0,0 +1,20 @@ +using System; +using Infrastructure.Attribute; +using ARW.Repository.System; +using ARW.Model.Models; + +namespace ARW.Repository +{ + /// + /// 多语言配置仓储 + /// + /// @author zr + /// @date 2022-05-06 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class CommonLangRepository : BaseRepository + { + #region 业务逻辑代码 + #endregion + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Repository/System/GenTableRepository.cs b/ARW-net/ARW.Repository/System/GenTableRepository.cs new file mode 100644 index 0000000..af20fce --- /dev/null +++ b/ARW-net/ARW.Repository/System/GenTableRepository.cs @@ -0,0 +1,91 @@ +using Infrastructure.Attribute; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model.System.Generate; + +namespace ARW.Repository.System +{ + [AppService(ServiceLifetime = LifeTime.Transient)] + public class GenTableRepository : BaseRepository + { + + } + [AppService(ServiceLifetime = LifeTime.Transient)] + public class GenTableColumnRepository : BaseRepository + { + /// + /// 根据表id批量删除表字段 + /// + /// + /// + public int DeleteGenTableColumn(long[] tableId) + { + return Context.Deleteable().Where(f => tableId.Contains(f.TableId)).ExecuteCommand(); + } + + /// + /// 根据表名删除字段 + /// + /// + /// + public int DeleteGenTableColumnByTableName(string tableName) + { + return Context.Deleteable().Where(f => f.TableName == tableName).ExecuteCommand(); + } + + /// + /// 获取表所有字段 + /// + /// + /// + public List GenTableColumns(long tableId) + { + return Context.Queryable().Where(f => f.TableId == tableId).OrderBy(x => x.Sort).ToList(); + } + + /// + /// 插入表字段 + /// + /// + /// + public int InsertGenTableColumn(List tableColumn) + { + return Context.Insertable(tableColumn).IgnoreColumns(x => new { x.Remark }).ExecuteCommand(); + } + + /// + /// 批量更新表字段 + /// + /// + /// + public int UpdateGenTableColumn(List tableColumn) + { + return Context.Updateable(tableColumn) + .WhereColumns(it => new { it.ColumnId, it.TableId}) + .UpdateColumns(it => new + { + it.ColumnComment, + it.CsharpField, + it.CsharpType, + it.IsQuery, + it.IsEdit, + it.IsInsert, + it.IsList, + it.QueryType, + it.HtmlType, + it.IsRequired, + it.Sort, + it.Update_time, + it.DictType, + it.Update_by, + it.Remark, + it.IsSort + }) + .ExecuteCommand(); + } + } +} diff --git a/ARW-net/ARW.Repository/System/SysConfigRepository.cs b/ARW-net/ARW.Repository/System/SysConfigRepository.cs new file mode 100644 index 0000000..89af844 --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysConfigRepository.cs @@ -0,0 +1,19 @@ +using System; +using Infrastructure.Attribute; +using ARW.Model.System; + +namespace ARW.Repository +{ + /// + /// 参数配置仓储接口的实现 + /// + /// @author zhaorui + /// @date 2021-09-29 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysConfigRepository : BaseRepository + { + #region 业务逻辑代码 + #endregion + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Repository/System/SysDeptRepository.cs b/ARW-net/ARW.Repository/System/SysDeptRepository.cs new file mode 100644 index 0000000..438b52b --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysDeptRepository.cs @@ -0,0 +1,48 @@ +using Infrastructure.Attribute; +using System.Collections.Generic; +using ARW.Model.System; + +namespace ARW.Repository.System +{ + /// + /// 部门管理 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysDeptRepository : BaseRepository + { + /// + /// + /// + /// + /// + public List SelectChildrenDeptById(long deptId) + { + string sql = "select * from sys_dept where find_in_set(@deptId, ancestors)"; + + return Context.SqlQueryable(sql).AddParameters(new { @deptId = deptId }).ToList(); + } + + public int UdateDeptChildren(List dept) + { + return Context.Updateable(dept).WhereColumns(f => new { f.DeptId }) + .UpdateColumns(it => new { it.Ancestors }).ExecuteCommand(); + } + } + + /// + /// 角色部门 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysRoleDeptRepository : BaseRepository + { + /// + /// 根据角色获取菜单id + /// + /// + /// + public List SelectRoleDeptByRoleId(long roleId) + { + return Context.Queryable().Where(it => it.RoleId == roleId).ToList(); + } + } +} diff --git a/ARW-net/ARW.Repository/System/SysDictDataRepository.cs b/ARW-net/ARW.Repository/System/SysDictDataRepository.cs new file mode 100644 index 0000000..7d67f6c --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysDictDataRepository.cs @@ -0,0 +1,114 @@ +using Infrastructure.Attribute; +using Infrastructure.Model; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using ARW.Model; +using ARW.Model.System; + +namespace ARW.Repository.System +{ + /// + /// 字典数据 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysDictDataRepository : BaseRepository + { + /// + /// 字典类型数据搜索 + /// + /// + /// + /// + public PagedInfo SelectDictDataList(SysDictData dictData, PagerInfo pagerInfo) + { + var exp = Expressionable.Create(); + exp.AndIF(!string.IsNullOrEmpty(dictData.DictLabel), it => it.DictLabel.Contains(dictData.DictLabel)); + exp.AndIF(!string.IsNullOrEmpty(dictData.Status), it => it.Status == dictData.Status); + exp.AndIF(!string.IsNullOrEmpty(dictData.DictType), it => it.DictType == dictData.DictType); + return GetPages(exp.ToExpression(), pagerInfo); + } + + /// + /// 根据字典类型查询 + /// + /// + /// + public List SelectDictDataByType(string dictType) + { + return Context.Queryable().Where(f => f.Status == "0" && f.DictType == dictType) + .OrderBy(it => it.DictSort) + .ToList(); + } + + /// + /// 根据字典类型查询 + /// + /// + /// + public List SelectDictDataByTypes(string[] dictTypes) + { + return Context.Queryable().Where(f => f.Status == "0" && dictTypes.Contains(f.DictType)) + .OrderBy(it => it.DictSort) + .ToList(); + } + /// + /// 新增保存字典数据信息 + /// + /// + /// + public long InsertDictData(SysDictData dict) + { + var result = Context.Insertable(dict).ExecuteReturnBigIdentity(); + return result; + } + + /// + /// 修改数据 + /// + /// + /// + public long UpdateDictData(SysDictData dict) + { + return Context.Updateable() + .SetColumns(t => new SysDictData() + { + Remark = dict.Remark, + Update_time = DateTime.Now, + DictSort = dict.DictSort, + DictLabel = dict.DictLabel, + DictValue = dict.DictValue, + Status = dict.Status, + CssClass = dict.CssClass, + ListClass = dict.ListClass + }) + .Where(f => f.DictCode == dict.DictCode).ExecuteCommand(); + } + + /// + /// 批量删除字典数据信息 + /// + /// + /// + public int DeleteDictDataByIds(long[] dictCodes) + { + return Delete(dictCodes); + } + + /// + /// 同步修改字典类型 + /// + /// 旧字典类型 + /// 新字典类型 + /// + public int UpdateDictDataType(string old_dictType, string new_dictType) + { + //只更新DictType字段根据where条件 + return Context.Updateable() + .SetColumns(t => new SysDictData() { DictType = new_dictType }) + .Where(f => f.DictType == old_dictType) + .ExecuteCommand(); + } + } +} diff --git a/ARW-net/ARW.Repository/System/SysDictRepository.cs b/ARW-net/ARW.Repository/System/SysDictRepository.cs new file mode 100644 index 0000000..7754291 --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysDictRepository.cs @@ -0,0 +1,56 @@ +using Infrastructure.Attribute; +using SqlSugar; +using System.Collections.Generic; +using ARW.Model; +using ARW.Model.System; + +namespace ARW.Repository.System +{ + /// + /// 字典 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysDictRepository : BaseRepository + { + public List GetAll() + { + return Context.Queryable().ToList(); + } + + /// + /// 查询字段类型列表 + /// + /// 实体模型 + /// + public PagedInfo SelectDictTypeList(SysDictType dictType, PagerInfo pager) + { + var exp = Expressionable.Create(); + exp.AndIF(!string.IsNullOrEmpty(dictType.DictName), it => it.DictName.Contains(dictType.DictName)); + exp.AndIF(!string.IsNullOrEmpty(dictType.Status), it => it.Status == dictType.Status); + exp.AndIF(!string.IsNullOrEmpty(dictType.DictType), it => it.DictType.Contains(dictType.DictType)); + exp.AndIF(!string.IsNullOrEmpty(dictType.Type), it => it.Type.Equals(dictType.Type)); + + return GetPages(exp.ToExpression(), pager, f => f.DictId, OrderByType.Desc); + } + + /// + /// 批量删除 + /// + /// + /// + public int DeleteDictTypeByIds(long[] id) + { + return Context.Deleteable().In(id).ExecuteCommand(); + } + + /// + /// 修改 + /// + /// + /// + public int UpdateDictType(SysDictType dictType) + { + return Context.Updateable(dictType).IgnoreColumns(it => new { dictType.Create_by }).ExecuteCommand(); + } + } +} diff --git a/ARW-net/ARW.Repository/System/SysFileRepository.cs b/ARW-net/ARW.Repository/System/SysFileRepository.cs new file mode 100644 index 0000000..aa2eda1 --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysFileRepository.cs @@ -0,0 +1,21 @@ +using System; +using Infrastructure.Attribute; +using ARW.Repository.System; +using ARW.Model.Models; +using ARW.Model.System; + +namespace ARW.Repository.System +{ + /// + /// 文件存储仓储 + /// + /// @author zz + /// @date 2021-12-15 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysFileRepository : BaseRepository + { + #region 业务逻辑代码 + #endregion + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Repository/System/SysLogininfoRepository.cs b/ARW-net/ARW.Repository/System/SysLogininfoRepository.cs new file mode 100644 index 0000000..c065a5b --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysLogininfoRepository.cs @@ -0,0 +1,89 @@ +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using System.Collections.Generic; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using SqlSugar; + +namespace ARW.Repository.System +{ + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysLogininfoRepository : BaseRepository + { + /// + /// 查询登录日志 + /// + /// + /// + /// + public PagedInfo GetLoginLog(SysLogininfor logininfoDto, PagerInfo pager) + { + var exp = Expressionable.Create(); + exp.And(it => it.loginTime >= logininfoDto.BeginTime && it.loginTime <= logininfoDto.EndTime); + exp.AndIF(logininfoDto.ipaddr.IfNotEmpty(), f => f.ipaddr == logininfoDto.ipaddr); + exp.AndIF(logininfoDto.userName.IfNotEmpty(), f => f.userName.Contains(logininfoDto.userName)); + exp.AndIF(logininfoDto.status.IfNotEmpty(), f => f.status == logininfoDto.status); + var query = Context.Queryable() + .Where(exp.ToExpression()) + .OrderBy(it => it.infoId, OrderByType.Desc); + + return query.ToPage(pager); + } + + /// + /// 登录日志记录 + /// + /// + /// + public void AddLoginInfo(SysLogininfor sysLogininfor) + { + int result = Context.Insertable(sysLogininfor) + .ExecuteReturnIdentity(); + } + + /// + /// 清空登录日志 + /// + public void TruncateLogininfo() + { + string sql = "truncate table sys_logininfor"; + + Context.Ado.ExecuteCommand(sql); + } + + /// + /// 删除登录日志 + /// + /// + /// + public int DeleteLogininforByIds(long[] ids) + { + return Context.Deleteable().In(ids).ExecuteCommand(); + } + + /// + /// 登录 + /// + /// 登录实体 + /// + public SysUser Login(LoginBodyDto user) + { + return Context.Queryable().First(it => it.UserName == user.Username && it.Password == user.Password); + } + + /// + /// 修改登录信息 + /// + /// + /// + /// + public void UpdateLoginInfo(LoginBodyDto user, long userId) + { + var db = Context; + db.Updateable(new SysUser() { LoginIP = user.LoginIP, LoginDate = db.GetDate(), UserId = userId }) + .UpdateColumns(it => new { it.LoginIP, it.LoginDate }) + .ExecuteCommand(); + } + } +} diff --git a/ARW-net/ARW.Repository/System/SysMenuRepository.cs b/ARW-net/ARW.Repository/System/SysMenuRepository.cs new file mode 100644 index 0000000..66b5e1e --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysMenuRepository.cs @@ -0,0 +1,198 @@ +using Infrastructure.Attribute; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using ARW.Model.System.Dto; +using ARW.Model.System; + +namespace ARW.Repository.System +{ + /// + /// 系统菜单 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysMenuRepository : BaseRepository + { + /// + /// 获取所有菜单(菜单管理) + /// + /// + public List SelectTreeMenuList(MenuQueryDto menu) + { + return Context.Queryable() + .WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName)) + .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.visible == menu.Visible) + .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.status == menu.Status) + .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), it => menu.MenuTypeIdArr.Contains(it.menuType)) + .OrderBy(it => new { it.parentId, it.orderNum }) + .ToTree(it => it.children, it => it.parentId, 0); + } + + /// + /// 根据用户查询系统菜单列表 + /// + /// + /// 用户角色集合 + /// + public List SelectTreeMenuListByRoles(MenuQueryDto menu, List roles) + { + var roleMenus = Context.Queryable() + .Where(r => roles.Contains(r.Role_id)) + .Select(f => f.Menu_id).Distinct().ToList(); + + return Context.Queryable() + .Where(c => roleMenus.Contains(c.MenuId)) + .WhereIF(!string.IsNullOrEmpty(menu.MenuName), (c) => c.MenuName.Contains(menu.MenuName)) + .WhereIF(!string.IsNullOrEmpty(menu.Visible), (c) => c.visible == menu.Visible) + .WhereIF(!string.IsNullOrEmpty(menu.Status), (c) => c.status == menu.Status) + .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), c => menu.MenuTypeIdArr.Contains(c.menuType)) + .OrderBy((c) => new { c.parentId, c.orderNum }) + .Select(c => c) + .ToTree(it => it.children, it => it.parentId, 0); + } + + /// + /// 获取所有菜单 + /// + /// + public List SelectMenuList(MenuQueryDto menu) + { + return Context.Queryable() + .WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName)) + .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.visible == menu.Visible) + .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.status == menu.Status) + .WhereIF(menu.ParentId != null, it => it.parentId == menu.ParentId) + .OrderBy(it => new { it.parentId, it.orderNum }) + .ToList(); + } + + /// + /// 根据用户查询系统菜单列表 + /// + /// + /// 用户角色集合 + /// + public List SelectMenuListByRoles(MenuQueryDto sysMenu, List roles) + { + var roleMenus = Context.Queryable() + .Where(r => roles.Contains(r.Role_id)); + + return Context.Queryable() + .InnerJoin(roleMenus, (c, j) => c.MenuId == j.Menu_id) + .Where((c, j) => c.status == "0") + .WhereIF(!string.IsNullOrEmpty(sysMenu.MenuName), (c, j) => c.MenuName.Contains(sysMenu.MenuName)) + .WhereIF(!string.IsNullOrEmpty(sysMenu.Visible), (c, j) => c.visible == sysMenu.Visible) + .OrderBy((c, j) => new { c.parentId, c.orderNum }) + .Select(c => c) + .ToList(); + } + + /// + /// 获取菜单详情 + /// + /// + /// + public SysMenu SelectMenuById(int menuId) + { + return Context.Queryable().Where(it => it.MenuId == menuId).Single(); + } + + /// + /// 添加菜单 + /// + /// + /// + public int AddMenu(SysMenu menu) + { + var Db = Context; + menu.Create_time = Db.GetDate(); + menu.MenuId = Db.Insertable(menu).ExecuteReturnIdentity(); + return 1; + } + + /// + /// 编辑菜单 + /// + /// + /// + public int EditMenu(SysMenu menu) + { + return Context.Updateable(menu).ExecuteCommand(); + } + + /// + /// 删除菜单 + /// + /// + /// + public int DeleteMenuById(int menuId) + { + return Context.Deleteable().Where(it => it.MenuId == menuId).ExecuteCommand(); + } + + /// + /// 菜单排序 + /// + /// 菜单Dto + /// + public int ChangeSortMenu(MenuDto menuDto) + { + var result = Context.Updateable(new SysMenu() { MenuId = menuDto.MenuId, orderNum = menuDto.orderNum }) + .UpdateColumns(it => new { it.orderNum }).ExecuteCommand(); + return result; + } + + /// + /// 查询菜单权限 + /// + /// + /// + public List SelectMenuPermsByUserId(long userId) + { + return Context.Queryable((m, rm, ur, r) => new JoinQueryInfos( + JoinType.Left, m.MenuId == rm.Menu_id, + JoinType.Left, rm.Role_id == ur.RoleId, + JoinType.Left, ur.RoleId == r.RoleId + )) + //.Distinct() + .Where((m, rm, ur, r) => m.status == "0" && r.Status == "0" && ur.UserId == userId) + .Select((m, rm, ur, r) => m).ToList(); + } + + /// + /// 校验菜单名称是否唯一 + /// + /// + /// + public SysMenu CheckMenuNameUnique(SysMenu menu) + { + return Context.Queryable() + .Where(it => it.MenuName == menu.MenuName && it.parentId == menu.parentId).Single(); + } + + /// + /// 是否存在菜单子节点 + /// + /// + /// + public int HasChildByMenuId(long menuId) + { + return Context.Queryable().Where(it => it.parentId == menuId).Count(); + } + + #region RoleMenu + + /// + /// 查询菜单使用数量 + /// + /// + /// + public int CheckMenuExistRole(long menuId) + { + return Context.Queryable().Where(it => it.Menu_id == menuId).Count(); + } + + #endregion + } +} diff --git a/ARW-net/ARW.Repository/System/SysNoticeRepository.cs b/ARW-net/ARW.Repository/System/SysNoticeRepository.cs new file mode 100644 index 0000000..ac991f2 --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysNoticeRepository.cs @@ -0,0 +1,21 @@ +using System; +using Infrastructure.Attribute; +using ARW.Repository.System; +using ARW.Model.Models; +using ARW.Model.System; + +namespace ARW.Repository.System +{ + /// + /// 通知公告表仓储 + /// + /// @author zr + /// @date 2021-12-15 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysNoticeRepository : BaseRepository + { + #region 业务逻辑代码 + #endregion + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Repository/System/SysOperLogRepository.cs b/ARW-net/ARW.Repository/System/SysOperLogRepository.cs new file mode 100644 index 0000000..06378d0 --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysOperLogRepository.cs @@ -0,0 +1,72 @@ +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using System.Collections.Generic; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using SqlSugar; +using Infrastructure.Model; + +namespace ARW.Repository.System +{ + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysOperLogRepository : BaseRepository + { + /// + /// 查询操作日志 + /// + /// + /// 分页数据 + /// + public PagedInfo GetSysOperLog(SysOperLogDto sysOper, PagerInfo pagerInfo) + { + var exp = Expressionable.Create(); + exp.And(it => it.operTime >= sysOper.BeginTime && it.operTime <= sysOper.EndTime); + exp.AndIF(sysOper.Title.IfNotEmpty(), it => it.title.Contains(sysOper.Title)); + exp.AndIF(sysOper.operName.IfNotEmpty(), it => it.operName.Contains(sysOper.operName)); + exp.AndIF(sysOper.BusinessType != -1, it => it.businessType == sysOper.BusinessType); + exp.AndIF(sysOper.Status != -1, it => it.status == sysOper.Status); + + return GetPages(exp.ToExpression(), pagerInfo, x => x.OperId, OrderByType.Desc); + } + + /// + /// 添加操作日志 + /// + /// + /// + public void AddSysOperLog(SysOperLog sysOperLog) + { + Context.Insertable(sysOperLog).ExecuteCommandAsync(); + } + + /// + /// 清空日志 + /// + public void ClearOperLog() + { + string sql = "truncate table sys_oper_log"; + Context.Ado.ExecuteCommand(sql); + } + + /// + /// 删除操作日志 + /// + /// + /// + public int DeleteOperLogByIds(long[] operIds) + { + return Context.Deleteable().In(operIds).ExecuteCommand(); + } + + /// + /// 查询操作日志 + /// + /// + /// + public SysOperLog SelectOperLogById(long operId) + { + return Context.Queryable().InSingle(operId); + } + } +} diff --git a/ARW-net/ARW.Repository/System/SysPostRepository.cs b/ARW-net/ARW.Repository/System/SysPostRepository.cs new file mode 100644 index 0000000..39854a3 --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysPostRepository.cs @@ -0,0 +1,15 @@ +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model.System; + +namespace ARW.Repository.System +{ + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysPostRepository : BaseRepository + { + } +} diff --git a/ARW-net/ARW.Repository/System/SysRoleRepository.cs b/ARW-net/ARW.Repository/System/SysRoleRepository.cs new file mode 100644 index 0000000..79687dc --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysRoleRepository.cs @@ -0,0 +1,211 @@ +using Infrastructure.Attribute; +using Infrastructure.Model; +using SqlSugar; +using System.Collections.Generic; +using System.Linq; +using ARW.Model; +using ARW.Model.System; + +namespace ARW.Repository.System +{ + /// + /// 角色操作类 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysRoleRepository : BaseRepository + { + /// + /// 查询所有角色数据 + /// + /// + public List SelectRoleList() + { + return Context.Queryable() + .Where(role => role.DelFlag == "0") + .OrderBy(role => role.RoleSort) + .ToList(); + } + /// + /// 根据条件分页查询角色数据 + /// + /// + /// + /// + public PagedInfo SelectRoleList(SysRole sysRole, PagerInfo pager) + { + var exp = Expressionable.Create(); + exp.And(role => role.DelFlag == "0"); + exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleName), role => role.RoleName.Contains(sysRole.RoleName)); + exp.AndIF(!string.IsNullOrEmpty(sysRole.Status), role => role.Status == sysRole.Status); + exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleKey), role => role.RoleKey == sysRole.RoleKey); + + var query = Context.Queryable() + .Where(exp.ToExpression()) + .OrderBy(x => x.RoleSort) + .Select((role) => new SysRole + { + RoleId = role.RoleId.SelectAll(), + UserNum = SqlFunc.Subqueryable().Where(f => f.RoleId == role.RoleId).Count() + }); + + return query.ToPage(pager); + } + + /// + /// 根据用户查询 + /// + /// + /// + public List SelectRolePermissionByUserId(long userId) + { + return Context.Queryable() + .Where(role => role.DelFlag == "0") + .Where(it => SqlFunc.Subqueryable().Where(s => s.UserId == userId).Any()) + .OrderBy(role => role.RoleSort) + .ToList(); + } + + /// + /// 通过角色ID查询角色 + /// + /// 角色编号 + /// + public SysRole SelectRoleById(long roleId) + { + return Context.Queryable().InSingle(roleId); + } + + /// + /// 通过角色ID删除角色 + /// + /// + /// + public int DeleteRoleByRoleIds(long[] roleId) + { + return Context.Deleteable().In(roleId).ExecuteCommand(); + } + + /// + /// 获取用户所有角色信息 + /// + /// + /// + public List SelectUserRoleListByUserId(long userId) + { + return Context.Queryable((ur, r) => new JoinQueryInfos( + JoinType.Left, ur.RoleId == r.RoleId + )).Where((ur, r) => ur.UserId == userId) + .Select((ur, r) => r).ToList(); + } + + #region 用户角色对应菜单 用户N-1角色 + + /// + /// 根据角色获取菜单id + /// + /// + /// + public List SelectRoleMenuByRoleId(long roleId) + { + return Context.Queryable().Where(it => it.Role_id == roleId).ToList(); + } + + /// + /// 根据用户所有角色获取菜单 + /// + /// + /// + public List SelectRoleMenuByRoleIds(long[] roleIds) + { + return Context.Queryable().Where(it => roleIds.Contains(it.Role_id)).ToList(); + } + + /// + /// 批量插入用户菜单 + /// + /// + /// + public int AddRoleMenu(List sysRoleMenus) + { + return Context.Insertable(sysRoleMenus).ExecuteCommand(); + } + + /// + /// 删除角色与菜单关联 + /// + /// + /// + public int DeleteRoleMenuByRoleId(long roleId) + { + return Context.Deleteable().Where(it => it.Role_id == roleId).ExecuteCommand(); + } + + #endregion + + /// + /// 添加角色 + /// + /// + /// + public long InsertRole(SysRole sysRole) + { + sysRole.Create_time = Context.GetDate(); + return Context.Insertable(sysRole).ExecuteReturnBigIdentity(); + } + + /// + /// 修改用户角色 + /// + /// + /// + public int UpdateSysRole(SysRole sysRole) + { + var db = Context; + sysRole.Update_time = db.GetDate(); + + return db.Updateable() + .SetColumns(it => it.Update_time == sysRole.Update_time) + .SetColumns(it => it.DataScope == sysRole.DataScope) + .SetColumns(it => it.Remark == sysRole.Remark) + .SetColumns(it => it.Update_by == sysRole.Update_by) + //.SetColumns(it => it.MenuCheckStrictly == sysRole.MenuCheckStrictly) + .SetColumns(it => it.DeptCheckStrictly == sysRole.DeptCheckStrictly) + .SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleName), it => it.RoleName == sysRole.RoleName) + .SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleKey), it => it.RoleKey == sysRole.RoleKey) + .SetColumnsIF(sysRole.RoleSort >= 0, it => it.RoleSort == sysRole.RoleSort) + .Where(it => it.RoleId == sysRole.RoleId) + .ExecuteCommand(); + } + + /// + /// 更改角色权限状态 + /// + /// + /// + /// + public int UpdateRoleStatus(SysRole role) + { + return Context.Updateable(role).UpdateColumns(t => new { t.Status }).ExecuteCommand(); + } + + /// + /// 检查角色权限是否存在 + /// + /// 角色权限 + /// + public SysRole CheckRoleKeyUnique(string roleKey) + { + return Context.Queryable().Where(it => it.RoleKey == roleKey).Single(); + } + + /// + /// 校验角色名称是否唯一 + /// + /// 角色名称 + /// + public SysRole CheckRoleNameUnique(string roleName) + { + return Context.Queryable().Where(it => it.RoleName == roleName).Single(); + } + } +} diff --git a/ARW-net/ARW.Repository/System/SysTasksQzRepository.cs b/ARW-net/ARW.Repository/System/SysTasksQzRepository.cs new file mode 100644 index 0000000..9814c16 --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysTasksQzRepository.cs @@ -0,0 +1,15 @@ +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model.System; + +namespace ARW.Repository.System +{ + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysTasksQzRepository: BaseRepository + { + } +} diff --git a/ARW-net/ARW.Repository/System/SysUserPostRepository.cs b/ARW-net/ARW.Repository/System/SysUserPostRepository.cs new file mode 100644 index 0000000..677ae4f --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysUserPostRepository.cs @@ -0,0 +1,27 @@ +using Infrastructure.Attribute; +using SqlSugar; +using System.Collections.Generic; +using ARW.Model.System; + +namespace ARW.Repository.System +{ + /// + /// 用户岗位 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysUserPostRepository : BaseRepository + { + /// + /// 获取用户岗位 + /// + /// + /// + public List SelectPostsByUserId(long userId) + { + return Context.Queryable((p, up) => new JoinQueryInfos( + JoinType.Left, up.PostId == p.PostId + )).Where((p, up) => up.UserId == userId) + .Select().ToList(); + } + } +} diff --git a/ARW-net/ARW.Repository/System/SysUserRepository.cs b/ARW-net/ARW.Repository/System/SysUserRepository.cs new file mode 100644 index 0000000..d826514 --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysUserRepository.cs @@ -0,0 +1,165 @@ +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using SqlSugar; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using ARW.Model; +using ARW.Model.System; + +namespace ARW.Repository.System +{ + /// + /// 用户管理 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysUserRepository : BaseRepository + { + /// + /// 根据条件分页查询用户列表 + /// + /// + /// + /// + public PagedInfo SelectUserList(SysUser user, PagerInfo pager) + { + var exp = Expressionable.Create(); + exp.AndIF(!string.IsNullOrEmpty(user.UserName), u => u.UserName.Contains(user.UserName)); + exp.AndIF(!string.IsNullOrEmpty(user.Status), u => u.Status == user.Status); + exp.AndIF(user.BeginTime != DateTime.MinValue && user.BeginTime != null, u => u.Create_time >= user.BeginTime); + exp.AndIF(user.EndTime != DateTime.MinValue && user.EndTime != null, u => u.Create_time <= user.EndTime); + exp.AndIF(!user.Phonenumber.IsEmpty(), u => u.Phonenumber == user.Phonenumber); + exp.And(u => u.DelFlag == "0"); + + if (user.DeptId != 0) + { + List depts = Context.Queryable().ToList(); + + var newDepts = depts.FindAll(delegate (SysDept dept) + { + string[] parentDeptId = dept.Ancestors.Split(",", StringSplitOptions.RemoveEmptyEntries); + return parentDeptId.Contains(user.DeptId.ToString()); + }); + string[] deptArr = newDepts.Select(x => x.DeptId.ToString()).ToArray(); + exp.AndIF(user.DeptId != 0, u => u.DeptId == user.DeptId || deptArr.Contains(u.DeptId.ToString())); + } + var query = Context.Queryable() + .LeftJoin((u, dept) => u.DeptId == dept.DeptId) + .Where(exp.ToExpression()) + .Select((u, dept) => new SysUser + { + UserId = u.UserId.SelectAll(), + DeptName = dept.DeptName, + }); + + return query.ToPage(pager); + } + + /// + /// 通过用户ID查询用户 + /// + /// + /// + public SysUser SelectUserById(long userId) + { + return Context.Queryable().Filter(null, true).Where(f => f.UserId == userId).First(); + } + + /// + /// 校验用户名是否存在 + /// + /// + /// + public int CheckUserNameUnique(string userName) + { + return Context.Queryable().Where(it => it.UserName == userName).Count(); + } + + /// + /// 添加用户 + /// + /// + /// + public int AddUser(SysUser sysUser) + { + sysUser.Create_time = DateTime.Now; + return Context.Insertable(sysUser).ExecuteReturnIdentity(); + } + + /// + /// 重置密码 + /// + /// + /// + /// + public int ResetPwd(long userid, string password) + { + return Context.Updateable(new SysUser() { UserId = userid, Password = password }) + .UpdateColumns(it => new { it.Password }).ExecuteCommand(); + } + + /// + /// 改变用户状态 + /// + /// + /// + public int ChangeUserStatus(SysUser user) + { + return Context.Updateable(user).UpdateColumns(t => new { t.Status }) + .ExecuteCommand(); + } + + /// + /// 删除用户(软删除) + /// + /// 用户id + /// + public int DeleteUser(long userid) + { + return Context.Updateable(new SysUser() { UserId = userid, DelFlag = "2" }) + .UpdateColumns(t => t.DelFlag) + .ExecuteCommand(); + } + + /// + /// 修改用户信息 + /// + /// + /// + public int UpdateUser(SysUser user) + { + return Context.Updateable(user) + .UpdateColumns(t => new + { + t.NickName, + t.Email, + t.Phonenumber, + t.DeptId, + t.Status, + t.Sex, + t.PostIds, + t.Remark, + t.Update_by, + t.Update_time + }) + .IgnoreColumns(ignoreAllNullColumns: true)//忽略所有为null + .Where(f => f.UserId == user.UserId).ExecuteCommand(); + } + + /// + /// 修改用户头像 + /// + /// + /// + public int UpdatePhoto(SysUser user) + { + return Context.Updateable() + .SetColumns(t => new SysUser() + { + Avatar = user.Avatar + }) + .Where(f => f.UserId == user.UserId).ExecuteCommand(); + } + } +} diff --git a/ARW-net/ARW.Repository/System/SysUserRoleRepository.cs b/ARW-net/ARW.Repository/System/SysUserRoleRepository.cs new file mode 100644 index 0000000..f3ec81b --- /dev/null +++ b/ARW-net/ARW.Repository/System/SysUserRoleRepository.cs @@ -0,0 +1,112 @@ +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using SqlSugar; +using System.Collections.Generic; +using ARW.Model; +using ARW.Model.System; +using ARW.Model.System.Dto; + +namespace ARW.Repository.System +{ + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysUserRoleRepository : BaseRepository + { + /// + /// 删除用户角色 + /// + /// + /// + public int DeleteUserRoleByUserId(int userId) + { + return Context.Deleteable().Where(it => it.UserId == userId).ExecuteCommand(); + } + + /// + /// 批量删除角色对应用户 + /// + /// 角色id + /// 用户id集合 + /// + public int DeleteRoleUserByUserIds(long roleId, List userIds) + { + return Context.Deleteable().Where(it => it.RoleId == roleId && userIds.Contains(it.UserId)) + .ExecuteCommand(); + } + + /// + /// 添加用户角色 + /// + /// + /// + public int AddUserRole(List sysUsers) + { + return Context.Insertable(sysUsers).ExecuteCommand(); + } + + /// + /// 删除角色关联的用户 + /// + /// + /// + public int DeleteUserRoleByRoleId(int roleId) + { + return Context.Deleteable().In(roleId).ExecuteCommand(); + } + + /// + /// 获取角色分配个数 + /// + /// + /// + public int CountUserRoleByRoleId(long roleId) + { + return Context.Queryable().Where(it => it.RoleId == roleId).Count(); + } + + /// + /// 获取用户数据根据角色id + /// + /// + /// + public List GetSysUsersByRoleId(long roleId) + { + return Context.Queryable((t1, u) => new JoinQueryInfos( + JoinType.Left, t1.UserId == u.UserId)) + .Where((t1, u) => t1.RoleId == roleId && u.DelFlag == "0") + .Select((t1, u) => u) + .ToList(); + } + + /// + /// 获取用户数据根据角色id + /// + /// + /// + public PagedInfo GetSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto) + { + var query = Context.Queryable((t1, u) => new JoinQueryInfos( + JoinType.Left, t1.UserId == u.UserId)) + .Where((t1, u) => t1.RoleId == roleUserQueryDto.RoleId && u.DelFlag == "0"); + if (!string.IsNullOrEmpty(roleUserQueryDto.UserName)) + { + query = query.Where((t1, u) => u.UserName.Contains(roleUserQueryDto.UserName)); + } + return query.Select((t1, u) => u).ToPage(roleUserQueryDto); + } + + /// + /// 获取尚未指派的用户数据根据角色id + /// + /// + /// + public PagedInfo GetExcludedSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto) + { + var query = Context.Queryable() + .Where(it => it.DelFlag == "0") + .Where(it => SqlFunc.Subqueryable().Where(s => s.UserId == it.UserId && s.RoleId == roleUserQueryDto.RoleId).NotAny()) + .WhereIF(roleUserQueryDto.UserName.IsNotEmpty(), it => it.UserName.Contains(roleUserQueryDto.UserName)); + + return query.ToPage(roleUserQueryDto); + } + } +} diff --git a/ARW-net/ARW.Service/ARW.Service.csproj b/ARW-net/ARW.Service/ARW.Service.csproj new file mode 100644 index 0000000..c48d136 --- /dev/null +++ b/ARW-net/ARW.Service/ARW.Service.csproj @@ -0,0 +1,20 @@ + + + + net6.0 + ARW.Service + ARW.Service + + + + + + + + + + + + + + diff --git a/ARW-net/ARW.Service/BaseService.cs b/ARW-net/ARW.Service/BaseService.cs new file mode 100644 index 0000000..6a75151 --- /dev/null +++ b/ARW-net/ARW.Service/BaseService.cs @@ -0,0 +1,19 @@ +using ARW.Repository; + +namespace ARW.Service +{ + /// + /// 基础服务定义 + /// + /// + public class BaseService : BaseRepository where T : class, new() + { + //public IBaseRepository baseRepository; + + //public BaseService(IBaseRepository repository) + //{ + // this.baseRepository = repository ?? throw new ArgumentNullException(nameof(repository)); + //} + + } +} diff --git a/ARW-net/ARW.Service/Business/BusinessService/Chat/ApplyServiceImpl.cs b/ARW-net/ARW.Service/Business/BusinessService/Chat/ApplyServiceImpl.cs new file mode 100644 index 0000000..411391d --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/Chat/ApplyServiceImpl.cs @@ -0,0 +1,65 @@ +using Infrastructure; +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using ARW.Common; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.Business.IBusinessService.Chat; +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Repository.Business.Chat; +using Mapster; +using Microsoft.AspNetCore.Http; +using ARW.Model.Models.Business; +using ARW.Repository.Business; +using SqlSugar; +using ARW.Repository; +using ARW.Model.Vo; +using ARW.Model.Vo.Chat; + +namespace ARW.Service.Business.BusinessService +{ + /// + /// 申请 + /// + [AppService(ServiceType = typeof(IApplyService), ServiceLifetime = LifeTime.Transient)] + public class ApplyServiceImpl : BaseService, IApplyService + { + private ChatApplyRepository _ChatRepository; + + public ApplyServiceImpl(ChatApplyRepository chatRepository) + { + _ChatRepository = chatRepository; + } + + public PagedInfo GetApplyList(ApplyQueryDto parm) + { + //开始拼装查询条件d + var predicate = Expressionable.Create(); + + var query = _ChatRepository + .Queryable() + .LeftJoin((s, c) => s.SenderGuId == c.ChatUserGuId) + .Where(s => s.ReceiverGuId == parm.UserGuId || ( s.SenderGuId == parm.UserGuId && s.IsAgree == false)) + .Select((s, c) => new ChatApplyRequestVo + { + SenderGuId = s.SenderGuId, + SenderName = c.ChatUserNickName, + SenderImg = c.ChatUserImg, + Postscript = s.Postscript, + Reply = s.Reply, + IsAgree = s.IsAgree, + IsGroupApply = s.IsGroupApply, + IsRead = s.IsRead, + SendTime = s.Create_time, + }); + + + return query.ToPage(parm); + } + + } +} diff --git a/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatGPT/ChatGPTLogListVo.cs b/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatGPT/ChatGPTLogListVo.cs new file mode 100644 index 0000000..7d6617f --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatGPT/ChatGPTLogListVo.cs @@ -0,0 +1,6 @@ +namespace ARW.Service.Business.BusinessService.Chat.ChatGPT +{ + public class ChatGPTLogListVo + { + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatGPT/ChatLogServiceImpl.cs b/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatGPT/ChatLogServiceImpl.cs new file mode 100644 index 0000000..b7a2c4d --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatGPT/ChatLogServiceImpl.cs @@ -0,0 +1,84 @@ +using Infrastructure; +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using ARW.Common; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.Business.IBusinessService.Chat; +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Repository.Business.Chat; +using ARW.Model.Vo.Chat; +using SqlSugar; +using ARW.Repository; +using ARW.Model.Models.Business; +using ARW.Model.Models.Business.Chat.ChatGPT; +using ARW.Repository.Business.Chat.ChatGPT; +using ARW.Model.Vo.Chat.ChatGPT; +using ARW.Model.Chat.ChatGPT; +using System.Threading.Tasks; + +namespace ARW.Service.Business.BusinessService.Chat.ChatGPT +{ + /// + /// 好友 + /// + [AppService(ServiceType = typeof(IChatGPTLogService), ServiceLifetime = LifeTime.Transient)] + public class ChatGPTLogServiceImpl : BaseService, IChatGPTLogService + { + private ChatGPTLogRepository _ChatGPTLogRepository; + + public ChatGPTLogServiceImpl(ChatGPTLogRepository ChatGPTLogRepository) + { + _ChatGPTLogRepository = ChatGPTLogRepository; + } + + public async Task> GetChatGPTLogList(ChatGPTQueryDto parm) + { + var query = _ChatGPTLogRepository + .Queryable() + .Where(s => s.SenderGuId == parm.UserGuId || s.ReceiverGuId == parm.UserGuId) + .OrderBy(s => s.ChatGptLogSendTime ,OrderByType.Asc) + .Select((s) => new ChatGPTLogVo + { + ReceiverGuId = s.ReceiverGuId, + SenderGuId = s.SenderGuId, + ChatGptLogContent = s.ChatGptLogContent, + ChatGptLogSendTime = s.ChatGptLogSendTime, + }); + + + return await query.ToListAsync(); + } + + /// + /// 添加ChatGPT聊天记录 + /// + /// + public long AddChatGPTLog(CahtGPTDto dto) + { + var modal = new ChatGPTLog + { + SenderGuId = dto.SenderGuId, + ReceiverGuId = dto.ReceiverGuId, + ChatGptLogContent = dto.Content, + ChatGptLogSendTime = DateTime.Now, + }; + + try + { + var id = _ChatGPTLogRepository.Insertable(modal).ExecuteReturnSnowflakeId(); + return id; + } + catch (Exception ex) + { + throw; + } + } + + } + +} diff --git a/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatLogServiceImpl.cs b/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatLogServiceImpl.cs new file mode 100644 index 0000000..44b0fb7 --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatLogServiceImpl.cs @@ -0,0 +1,269 @@ +using Infrastructure; +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using ARW.Common; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.Business.IBusinessService.Chat; +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Repository.Business.Chat; +using ARW.Model.Vo.Chat; +using SqlSugar; +using ARW.Repository; +using ARW.Model.Models.Business; + +namespace ARW.Service.Business.BusinessService +{ + /// + /// 好友 + /// + [AppService(ServiceType = typeof(IChatLogService), ServiceLifetime = LifeTime.Transient)] + public class ChatLogServiceImpl : BaseService, IChatLogService + { + private ChatLogRepository _ChatLogRepository; + private GroupUserRepository _GroupUserRepository; + + public ChatLogServiceImpl(ChatLogRepository ChatLogRepository, GroupUserRepository groupUserRepository) + { + _ChatLogRepository = ChatLogRepository; + _GroupUserRepository = groupUserRepository; + } + + public List GetChatLogList(ChatLogQueryDto parm) + { + var id = parm.UserGuId; + var q = Context.Ado.SqlQuery("SELECT\r\n\t`a`.`SenderGuId` AS `SenderGuId`,\r\n\t`a`.`ReceiverGuId` AS `ReceiverGuId`,\r\n\t`a`.`ChatLogContent` AS `ChatLogContent`,\r\n\t`a`.`isRead` AS `IsRead`,\r\n\tDATE_FORMAT(`a`.`ChatLogSendTime`,'%m月%d日 %H:%i') AS `ChatLogSendTime`,\r\n\t`b`.`chat_user_guid` AS `ChatUserGuId`,\r\n\t`b`.`chat_user_name` AS `ChatUserName`,\r\n\t`b`.`chat_user_nickname` AS `ChatUserNickName`,\r\n\t`b`.`chat_user_sex` AS `Sex`,\r\n\t`b`.`chat_user_age` AS `Age`,\r\n\t`b`.`chat_user_img` AS `ChatUserImg`,\r\n\t`b`.`chat_user_phone` AS `Phone`,\r\n\t`b`.`chat_user_email` AS `Email`,\r\n\t`c`.`friends_note` AS `FriendNote`\r\nFROM\r\n\t(\r\n\tSELECT\r\n\t\t* \r\n\tFROM\r\n\t\t( SELECT\r\n\t\t\t`sender_guid` AS `SenderGuId`,\r\n\t\t\t`receiver_guid` AS `ReceiverGuId`,\r\n\t\t\t`chat_log_content` AS `ChatLogContent`,\r\n\t\t\t`isRead` AS `isRead`,\r\n\t\t\t`chat_log_send_time` AS `ChatLogSendTime`\r\n\t\t\tFROM `tb_chat_log` WHERE ( `receiver_guid` = @id ) ORDER BY Create_time DESC Limit 9999 ) MergeTable \r\n\t) a\r\n\tLEFT JOIN `tb_chat_user` b ON ( `a`.`SenderGuId` = `b`.`chat_user_guid` )\r\n\tLEFT JOIN `tb_chat_friends` c ON ( `b`.`chat_user_guid` = `c`.`friends_guid` and c.uesr_guid = @id )\r\ngroup BY\r\n\t`SenderGuId`", new {id = id }); + var q2 = Context.Ado.SqlQuery("SELECT\r\n\t`a`.`SenderGuId` AS `SenderGuId`,\r\n\t`a`.`ReceiverGuId` AS `ReceiverGuId`,\r\n\t`a`.`ChatLogContent` AS `ChatLogContent`,\r\n\t`a`.`isRead` AS `IsRead`,\r\n\tDATE_FORMAT ( `a`.`ChatLogSendTime`, '%m月%d日 %H:%i' ) AS `ChatLogSendTime`,\r\n\t`a`.`GroupGuId` AS `GroupGuId`,\r\n\t`a`.`GroupImg` AS `GroupImg`,\r\n\t`a`.`GroupName` AS `GroupName`,\r\n\t`a`.`GroupIsRead` AS `GroupIsRead` \r\nFROM\r\n\t(\r\n\tSELECT\r\n\t\t* \r\n\tFROM\r\n\t\t(\r\n\t\tSELECT\r\n\t\t\t`a`.`sender_guid` AS `SenderGuId`,\r\n\t\t\t`a`.`receiver_guid` AS `ReceiverGuId`,\r\n\t\t\t`a`.`chat_log_content` AS `ChatLogContent`,\r\n\t\t\t`a`.`isRead` AS `isRead`,\r\n\t\t\t`a`.`chat_log_send_time` AS `ChatLogSendTime`,\r\n\t\t\t`b`.`group_guid` AS `GroupGuId`,\r\n\t\t\t`b`.`group_img` AS `GroupImg`,\r\n\t\t\t`b`.`group_name` AS `GroupName`,\r\n\t\t\t`c`.`isRead` AS `GroupIsRead` \r\n\t\tFROM\r\n\t\t\t`tb_chat_log` a\r\n\t\t\tLEFT JOIN `tb_chat_group` b ON ( `a`.`receiver_guid` = `b`.`group_guid` )\r\n\t\t\tJOIN `tb_chat_group_user` c ON ( `b`.`group_guid` = `c`.`group_guid` AND c.user_guid = @id ) \r\n\t\tWHERE\r\n\t\t\t( `a`.`receiver_guid` = b.group_guid ) \r\n\t\tORDER BY\r\n\t\t\tchat_log_send_time DESC \r\n\t\t\tLIMIT 9999 \r\n\t\t) MergeTable \r\n\t) a \r\nGROUP BY\r\n\t`ReceiverGuId`", new { id = id }); + + var list = new List(); + + foreach (var item in q) + { + list.Add(item); + } + + foreach (var i in q2) + { + list.Add(i); + } + + return list; + } + + /// + /// 添加好友聊天记录 + /// + /// + public long AddChatFriendLog(ChatLogDto dto) + { + var modal = new ChatLog + { + ChatLogType = dto.ChatLogType, + SenderGuId = dto.SenderGuId, + ReceiverGuId = dto.ReceiverGuId, + ChatLogContent = dto.ChatLogContent, + ChatLogSendTime = DateTime.Now, + }; + + try + { + var id = _ChatLogRepository.Insertable(modal).ExecuteReturnSnowflakeId(); + return id; + } + catch (Exception ex) + { + throw; + } + } + + /// + /// 获取好友聊天记录列表 + /// + /// + /// + public PagedInfo GetChatFriendLogList(ChatLogQueryDto parm) + { + + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.ChatLogContent), it => it.ChatLogContent.Contains(parm.ChatLogContent)); + + var query1 = _ChatLogRepository + .Queryable() + .Where(s => s.SenderGuId == parm.UserGuId && s.ReceiverGuId == parm.FriendsGuId) + .Select((s) => new ChatLogVo + { + ChatLogType = s.ChatLogType, + SenderGuId = s.SenderGuId, + ReceiverGuId = s.ReceiverGuId, + ChatLogContent = s.ChatLogContent, + ChatLogSendTime = s.ChatLogSendTime, + }); + + var query2 = _ChatLogRepository + .Queryable() + .Where(s => s.SenderGuId == parm.FriendsGuId && s.ReceiverGuId == parm.UserGuId) + .Select((s) => new ChatLogVo + { + ChatLogType = s.ChatLogType, + SenderGuId = s.SenderGuId, + ReceiverGuId = s.ReceiverGuId, + ChatLogContent = s.ChatLogContent, + ChatLogSendTime = s.ChatLogSendTime, + }); + + + var select = Context.Union(query1, query2).Where(predicate.ToExpression()).OrderBy(s => s.ChatLogSendTime, OrderByType.Desc); + + return select.ToPage(parm); + } + + /// + /// 获取群聊聊天记录 + /// + /// + /// + public PagedInfo GetChatGroupLogList(ChatLogQueryDto parm) + { + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.ChatLogContent), it => it.ChatLogContent.Contains(parm.ChatLogContent)); + + var query1 = _ChatLogRepository + .Queryable() + .Where(s => s.ReceiverGuId == parm.FriendsGuId) + .Where(predicate.ToExpression()) + .OrderBy(s => s.ChatLogSendTime, OrderByType.Desc) + .LeftJoin((s, c) => s.SenderGuId == c.ChatUserGuId) + .Select((s,c) => new ChatLogVo + { + ChatLogType = s.ChatLogType, + Sender = c, + ReceiverGuId = s.ReceiverGuId, + ChatLogContent = s.ChatLogContent, + ChatLogSendTime = s.ChatLogSendTime, + }) + ; + + return query1.ToPage(parm); + } + + /// + /// 获取好友历史聊天记录列表 + /// + /// + /// + public List GetChatFriendHistoryLogList(ChatLogQueryDto parm) + { + + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.ChatLogContent), it => it.ChatLogContent.Contains(parm.ChatLogContent)); + + var query1 = _ChatLogRepository + .Queryable() + .Where(s => s.SenderGuId == parm.UserGuId && s.ReceiverGuId == parm.FriendsGuId) + .Select((s) => new ChatLogVo + { + ChatLogType = s.ChatLogType, + SenderGuId = s.SenderGuId, + ReceiverGuId = s.ReceiverGuId, + ChatLogContent = s.ChatLogContent, + ChatLogSendTime = s.ChatLogSendTime, + }); + + var query2 = _ChatLogRepository + .Queryable() + .Where(s => s.SenderGuId == parm.FriendsGuId && s.ReceiverGuId == parm.UserGuId) + .Select((s) => new ChatLogVo + { + ChatLogType = s.ChatLogType, + SenderGuId = s.SenderGuId, + ReceiverGuId = s.ReceiverGuId, + ChatLogContent = s.ChatLogContent, + ChatLogSendTime = s.ChatLogSendTime, + }); + + + var select = Context.Union(query1, query2).Where(predicate.ToExpression()).OrderBy(s => s.ChatLogSendTime, OrderByType.Desc).ToList(); + + return select; + } + + /// + /// 获取群聊历史聊天记录 + /// + /// + /// + public List GetChatGroupLogHistoryList(ChatLogQueryDto parm) + { + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.ChatLogContent), it => it.ChatLogContent.Contains(parm.ChatLogContent)); + + var query1 = _ChatLogRepository + .Queryable() + .Where(s => s.ReceiverGuId == parm.FriendsGuId) + .Where(predicate.ToExpression()) + .OrderBy(s => s.ChatLogSendTime, OrderByType.Desc) + .LeftJoin((s, c) => s.SenderGuId == c.ChatUserGuId) + .Select((s, c) => new ChatLogVo + { + ChatLogType = s.ChatLogType, + Sender = c, + ReceiverGuId = s.ReceiverGuId, + ChatLogContent = s.ChatLogContent, + ChatLogSendTime = s.ChatLogSendTime, + }) + ; + + return query1.ToList(); + } + + /// + /// 获取自己发的消息(最新) + /// + /// + /// + /// + public ChatLogVo SelfNewMsg(ChatLogQueryDto parm) + { + var query1 = _ChatLogRepository + .Queryable() + .Where(s => s.SenderGuId == parm.UserGuId && s.ReceiverGuId == parm.FriendsGuId) + .Select((s) => new ChatLogVo + { + ChatLogType = s.ChatLogType, + SenderGuId = s.SenderGuId, + ReceiverGuId = s.ReceiverGuId, + ChatLogContent = s.ChatLogContent, + ChatLogSendTime = s.ChatLogSendTime, + }). + OrderBy(s => s.ChatLogSendTime, OrderByType.Desc); + + return query1.First(); + } + + public void Read(ChatLogQueryDto parm) + { + _ChatLogRepository.Update(s => s.SenderGuId == parm.FriendsGuId && s.ReceiverGuId == parm.UserGuId, + f => new ChatLog + { + IsRead = true + }); + } + + public void GroupRead(ChatLogQueryDto parm) + { + var user = _GroupUserRepository.Update(s => s.GroupGuId == parm.FriendsGuId && s.UserGuId == parm.UserGuId, + f => new GroupUser + { + IsRead = true + }); + } + } +} diff --git a/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatLoginServiceImpl.cs b/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatLoginServiceImpl.cs new file mode 100644 index 0000000..d80990d --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/Chat/ChatLoginServiceImpl.cs @@ -0,0 +1,147 @@ +using Infrastructure; +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using ARW.Common; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.Business.IBusinessService.Chat; +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Repository.Business.Chat; +using System.Threading.Tasks; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Repository.Business; +using SqlSugar; +using ARW.Repository; +using ARW.Model.Vo.Chat; + +namespace ARW.Service.Business.BusinessService +{ + /// + /// 登录 + /// + [AppService(ServiceType = typeof(IChatLoginService), ServiceLifetime = LifeTime.Transient)] + public class ChatLoginServiceImpl : BaseService, IChatLoginService + { + private ChatRepository _ChatRepository; + + public ChatLoginServiceImpl(ChatRepository chatRepository) + { + _ChatRepository = chatRepository; + } + + /// + /// 获取聊天用户列表 + /// + /// + /// + /// + public PagedInfo GetChatUserList(ChatUserQueryDto parm) + { + //开始拼装查询条件d + var predicate = Expressionable.Create(); + + //搜索条件查询语法参考Sqlsugar + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.ChatUserName), it => it.ChatUserName.Contains(parm.ChatUserName)); + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.ChatUserNickName), it => it.ChatUserName.Contains(parm.ChatUserNickName)); + predicate = predicate.AndIF(parm.ChatUserStatus != null, it => it.Status == parm.ChatUserStatus); + + + var query = _ChatRepository + .Queryable() + .Where(predicate.ToExpression()) + .Select((s) => new ChatUserVo + { + ChatUserId = s.ChatUserId, + ChatUserGuId = s.ChatUserGuId, + ChatUserName = s.ChatUserName, + ChatUserNickName = s.ChatUserNickName, + ChatUserImg = s.ChatUserImg, + Sex = s.Sex, + Age = s.Age, + Phone = s.Phone, + Email = s.Email, + Status = s.Status + }); + + return query.ToPage(parm); + } + + + public Task FindUserByGuid(long guid) + { + var user = _ChatRepository.GetFirstAsync(q => q.ChatUserGuId == guid); + if (user == null) { throw new CustomException("用户不存在"); } + return user; + } + + public ChatUser FindUserByName(string name) + { + var user = _ChatRepository.GetFirst(q => q.ChatUserName == name); + if (user == null) { throw new CustomException("用户不存在"); } + return user; + } + + /// + /// 登录验证 + /// + /// + /// + public ChatUser Login(ChatUserDto loginBody) + { + //密码md5 + loginBody.Password = NETCore.Encrypt.EncryptProvider.Md5(loginBody.Password); + + ChatUser user = _ChatRepository.Login(loginBody); + + if (user == null || user.ChatUserId <= 0) + { + throw new CustomException(ResultCode.LOGIN_ERROR, "用户名或密码错误"); + } + + if (user.Status == 1) + { + throw new CustomException(ResultCode.LOGIN_ERROR, "账号已在别处登录"); + } + user.Status = 1; + _ChatRepository.Updateable(user); + + return user; + } + + public ChatUser Register(ChatUserDto dto) + { + //密码md5 + dto.Password = NETCore.Encrypt.EncryptProvider.Md5(dto.Password); + + var u = _ChatRepository.GetFirst(q => q.ChatUserName == dto.ChatUserName); + + if (u != null) + { + throw new CustomException(ResultCode.LOGIN_ERROR, "用户名已存在"); + } + if (!Tools.PasswordStrength(dto.Password)) + { + throw new CustomException("密码强度不符合要求"); + } + ChatUser user = new() + { + Create_time = DateTime.Now, + ChatUserName = dto.ChatUserName, + ChatUserNickName = dto.ChatUserNickName, + ChatUserImg = "http://chat.aerwen.net/dev-api//uploads/20220930/BB374FB4935C5656.jpg", + Password = dto.Password, + Status = 1, + Sex = "1" + }; + + user.ChatUserGuId = _ChatRepository.AddGuid(user); + return user; + + } + } +} diff --git a/ARW-net/ARW.Service/Business/BusinessService/Chat/FriendsServiceImpl.cs b/ARW-net/ARW.Service/Business/BusinessService/Chat/FriendsServiceImpl.cs new file mode 100644 index 0000000..76127de --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/Chat/FriendsServiceImpl.cs @@ -0,0 +1,58 @@ +using Infrastructure; +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using ARW.Common; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.Business.IBusinessService.Chat; +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Repository.Business.Chat; +using ARW.Model.Vo.Chat; +using SqlSugar; +using ARW.Repository; + +namespace ARW.Service.Business.BusinessService +{ + /// + /// 好友 + /// + [AppService(ServiceType = typeof(IFriendsService), ServiceLifetime = LifeTime.Transient)] + public class FriendsServiceImpl : BaseService, IFriendsService + { + private FriendsRepository _FriendsRepository; + + public FriendsServiceImpl(FriendsRepository FriendsRepository) + { + _FriendsRepository = FriendsRepository; + } + + public PagedInfo GetFriendsList(FriendsQueryDto parm) + { + var query = _FriendsRepository + .Queryable() + .LeftJoin((s, c) => s.FriendsGuId == c.ChatUserGuId) + .Where(s => s.UserGuId == parm.UserGuId) + .Select((s, c) => new FriendsVo + { + FriendGuId = s.FriendsGuId, + FriendName = c.ChatUserName, + FriendNickName = c.ChatUserNickName, + FriendImg = c.ChatUserImg, + FriendNote = s.FriendsNote, + CreateTime = s.Create_time, + Sex = c.Sex, + Age = c.Age, + Phone = c.Phone, + Email = c.Email, + Status = c.Status, + }); + + + return query.ToPage(parm); + } + } +} diff --git a/ARW-net/ARW.Service/Business/BusinessService/Chat/GroupServiceImpl.cs b/ARW-net/ARW.Service/Business/BusinessService/Chat/GroupServiceImpl.cs new file mode 100644 index 0000000..5cbd7a2 --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/Chat/GroupServiceImpl.cs @@ -0,0 +1,55 @@ +using Infrastructure; +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using ARW.Common; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.Business.IBusinessService.Chat; +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Repository.Business.Chat; +using ARW.Model.Vo.Chat; +using SqlSugar; +using ARW.Repository; + +namespace ARW.Service.Business.BusinessService +{ + /// + /// 好友 + /// + [AppService(ServiceType = typeof(IGroupService), ServiceLifetime = LifeTime.Transient)] + public class GroupServiceImpl : BaseService, IGroupService + { + private GroupRepository _GroupRepository; + + public GroupServiceImpl(GroupRepository GroupRepository) + { + _GroupRepository = GroupRepository; + } + + public PagedInfo GetGroupList(GroupQueryDto parm) + { + var query = _GroupRepository + .Queryable() + .LeftJoin((s, c) => s.GroupGuId == c.GroupGuId) + .LeftJoin((s, c, d) => c.UserGuId == d.ChatUserGuId) + .Where((s, c, d) => d.ChatUserGuId == parm.UserGuId) + .Select((s, c, d) => new GroupVo + { + GroupGuId = s.GroupGuId, + GroupName = s.GroupName, + GroupImg = s.GroupImg, + GroupNum = SqlFunc.Subqueryable().LeftJoin((a,b) => a.GroupGuId == b.GroupGuId).Where(a => a.GroupGuId == s.GroupGuId).Count(), + GroupUserList = d, + CreateTime = s.Create_time, + }); + + + return query.ToPage(parm); + } + + } +} diff --git a/ARW-net/ARW.Service/Business/BusinessService/Chat/GroupUserServiceImpl.cs b/ARW-net/ARW.Service/Business/BusinessService/Chat/GroupUserServiceImpl.cs new file mode 100644 index 0000000..eb2d6f3 --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/Chat/GroupUserServiceImpl.cs @@ -0,0 +1,59 @@ +using Infrastructure; +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using ARW.Common; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.Business.IBusinessService.Chat; +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Repository.Business.Chat; +using ARW.Model.Vo.Chat; +using SqlSugar; +using ARW.Repository; + +namespace ARW.Service.Business.BusinessService +{ + /// + /// 好友 + /// + [AppService(ServiceType = typeof(IGroupUserService), ServiceLifetime = LifeTime.Transient)] + public class GroupUserServiceImpl : BaseService, IGroupUserService + { + private GroupUserRepository _GroupUserRepository; + + public GroupUserServiceImpl(GroupUserRepository GroupUserRepository) + { + _GroupUserRepository = GroupUserRepository; + } + + //public PagedInfo GetGroupList(GroupQueryDto parm) + //{ + // var query = _GroupUserRepository + // .Queryable() + // .LeftJoin((s, c) => s.FriendsGuId == c.ChatUserGuId) + // .Where(s => s.UserGuId == parm.UserGuId) + // .Select((s, c) => new FriendsVo + // { + // FriendGuId = s.FriendsGuId, + // FriendName = c.ChatUserName, + // FriendNickName = c.ChatUserNickName, + // FriendImg = c.ChatUserImg, + // FriendNote = s.FriendsNote, + // CreateTime = s.Create_time, + // Sex = c.Sex, + // Age = c.Age, + // Phone = c.Phone, + // Email = c.Email, + // Status = c.Status, + // }); + + + // return query.ToPage(parm); + //} + + } +} diff --git a/ARW-net/ARW.Service/Business/BusinessService/ClassServiceImpl.cs b/ARW-net/ARW.Service/Business/BusinessService/ClassServiceImpl.cs new file mode 100644 index 0000000..df433a8 --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/ClassServiceImpl.cs @@ -0,0 +1,49 @@ +using Infrastructure.Attribute; +using Microsoft.AspNetCore.Http; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Repository; +using ARW.Repository.Business; +using ARW.Service.Business.IBusinessService; + +namespace ARW.Service.Business.BusinessService +{ + /// + /// 班级接口实现类 + /// + [AppService(ServiceType = typeof(IClassService), ServiceLifetime = LifeTime.Transient)] + public class ClassServiceImpl : BaseService, IClassService + { + private readonly ClassRepository _classRepository; + + public ClassServiceImpl(ClassRepository classRepository) + { + this._classRepository = classRepository; + } + + public PagedInfo GetClassList(ClassQueryDto parm) + { + //开始拼装查询条件d + var predicate = Expressionable.Create(); + + //搜索条件查询语法参考Sqlsugar + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.ClassName), it => it.ClassName.Contains(parm.ClassName)) ; + + + var query = _classRepository + .Queryable() + .Where(predicate.ToExpression()); + + return query.ToPage(parm); + } + + + } +} diff --git a/ARW-net/ARW.Service/Business/BusinessService/Crawler/CrawlServiceImpl.cs b/ARW-net/ARW.Service/Business/BusinessService/Crawler/CrawlServiceImpl.cs new file mode 100644 index 0000000..9fc71a5 --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/Crawler/CrawlServiceImpl.cs @@ -0,0 +1,77 @@ +using Infrastructure.Attribute; +using Microsoft.AspNetCore.Http; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.Dto.Business.Crawler; +using ARW.Model.Models.Business; +using ARW.Model.Vo.Crawler; +using ARW.Service.Business.IBusinessService.Crawler; +using ARW.Model.Models.Business.Crawler; +using ARW.Repository.Business; +using ARW.Repository; +using AngleSharp.Html.Parser; +using RestSharp; + +namespace ARW.Service.Business.BusinessService +{ + /// + /// 不羞涩接口实现类 + /// + [AppService(ServiceType = typeof(ICrawlService), ServiceLifetime = LifeTime.Transient)] + public class CrawlServiceImpl : BaseService, ICrawlService + { + private readonly CrawlRepository _crawlRepository; + + public CrawlServiceImpl(CrawlRepository crawlRepository) + { + this._crawlRepository = crawlRepository; + } + + + public string LoadHTML(string url) + { + //return _crawlRepository.LoadBuxiuseHTML(url); + return _crawlRepository.LoadYellowHTML(url); + + } + + public int ParseMovies(string html) + { + //return _crawlRepository.ParseBuxiusePic(html); + return _crawlRepository.ParseYellowPic(html); + } + + public List GetBuxiuseList(CrawlQueryDto parm) + { + //开始拼装查询条件d + var predicate = Expressionable.Create(); + + //搜索条件查询语法参考Sqlsugar + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Name), s => s.Name.Contains(parm.Name)); + + var query = _crawlRepository + .Queryable() + .Where(predicate.ToExpression()) + .Select((s) => new CrawlVo + { + Id = s.Id, + Name = s.Name, + Intro = s.Intro, + Cover = s.Cover, + Link = s.Link, + Type = s.Type, + PublishTime = s.PublishTime, + }); + + + return query.ToList(); + } + + + } +} diff --git a/ARW-net/ARW.Service/Business/BusinessService/ProductTypeServiceImpl.cs b/ARW-net/ARW.Service/Business/BusinessService/ProductTypeServiceImpl.cs new file mode 100644 index 0000000..0defe11 --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/ProductTypeServiceImpl.cs @@ -0,0 +1,54 @@ +using Infrastructure.Attribute; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model.Dto.Business.Product; +using ARW.Model.Models.Business.Product; +using ARW.Model.Vo; +using ARW.Repository.Business; +using ARW.Service.Business.IBusinessService; + +namespace ARW.Service.Business.BusinessService +{ + /// + /// 产品类型实现类 + /// + [AppService(ServiceType = typeof(IProductTypeService), ServiceLifetime = LifeTime.Transient)] + public class ProductTypeServiceImpl : BaseService, IProductTypeService + { + private readonly ProductTypeRepository _ProductTypeRepository; + + public ProductTypeServiceImpl(ProductTypeRepository productTypeRepository) + { + _ProductTypeRepository = productTypeRepository; + } + + /// + /// 查询产品类型树列表 + /// + /// + /// + public List GetTreeList(ProductTypeQueryDto parm) + { + //开始拼装查询条件 + var predicate = Expressionable.Create(); + + //搜索条件查询语法参考Sqlsugar + + var response = _ProductTypeRepository.Queryable() + .Where(predicate.ToExpression()) + .Select(it => new ProductTypeVo{ + ProductTypeId = it.ProductTypeId, + ParentId = it.ParentId, + ProductTypeName = it.ProductTypeName + }).ToTree(it => it.Children, it => it.ParentId, 0); + + + return response; + } + + } +} diff --git a/ARW-net/ARW.Service/Business/BusinessService/StudentServiceImpl.cs b/ARW-net/ARW.Service/Business/BusinessService/StudentServiceImpl.cs new file mode 100644 index 0000000..aaf8763 --- /dev/null +++ b/ARW-net/ARW.Service/Business/BusinessService/StudentServiceImpl.cs @@ -0,0 +1,65 @@ +using Infrastructure.Attribute; +using Microsoft.AspNetCore.Http; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Model.Vo; +using ARW.Repository; +using ARW.Repository.Business; +using ARW.Service.Business.IBusinessService; + +namespace ARW.Service.Business.BusinessService +{ + /// + /// 学生接口实现类 + /// + [AppService(ServiceType = typeof(IStudentService), ServiceLifetime = LifeTime.Transient)] + public class StudentServiceImpl : BaseService, IStudentService + { + private readonly StudentRepository _studentRepository; + + public StudentServiceImpl(StudentRepository studentRepository) + { + this._studentRepository = studentRepository; + } + + public PagedInfo GetStudentList(StudentQueryDto parm) + { + //开始拼装查询条件d + var predicate = Expressionable.Create(); + + //搜索条件查询语法参考Sqlsugar + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.StudentName), s => s.StudentName.Contains(parm.StudentName)); + predicate = predicate.AndIF(parm.ClassId != null, s => s.ClassId == parm.ClassId); + + var query = _studentRepository + .Queryable() + .LeftJoin((s, c) => s.ClassId == c.ClassId) + .Where(predicate.ToExpression()) + .Select((s, c) => new StudentVo + { + StudentId = s.StudentId, + ClassId = c.ClassId, + ClassName = c.ClassName, + StudentName = s.StudentName, + Sex = s.Sex, + Age = s.Age, + StudentImg = s.StudentImg, + StudentTag = s.StudentTag, + StudentService= s.StudentService.ToString(), + StudentDescribe = s.StudentDescribe + }); + + + return query.ToPage(parm); + } + + + } +} diff --git a/ARW-net/ARW.Service/Business/IBusinessService/Chat/ChatGPT/IChatGPTLogService.cs b/ARW-net/ARW.Service/Business/IBusinessService/Chat/ChatGPT/IChatGPTLogService.cs new file mode 100644 index 0000000..30d8771 --- /dev/null +++ b/ARW-net/ARW.Service/Business/IBusinessService/Chat/ChatGPT/IChatGPTLogService.cs @@ -0,0 +1,27 @@ +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Model; +using ARW.Model.Chat.ChatGPT; +using ARW.Model.Vo.Chat.ChatGPT; +using System.Collections.Generic; +using ARW.Model.Models.Business.Chat.ChatGPT; +using System.Threading.Tasks; + +namespace ARW.Service.Business.IBusinessService.Chat +{ + public interface IChatGPTLogService : IBaseService + { + //List GetChatGPTLogList(ChatGPTLogQueryDto parm); + + Task> GetChatGPTLogList(ChatGPTQueryDto parm); + + public long AddChatGPTLog(CahtGPTDto dto); + + //public ChatGPTLogVo SelfNewMsg(ChatGPTLogQueryDto parm); + + //public void Read(ChatGPTLogQueryDto parm); + + //public void GroupRead(ChatGPTLogQueryDto parm); + + } +} diff --git a/ARW-net/ARW.Service/Business/IBusinessService/Chat/IApplyService.cs b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IApplyService.cs new file mode 100644 index 0000000..87f63f4 --- /dev/null +++ b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IApplyService.cs @@ -0,0 +1,16 @@ +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Model.Dto.Business; +using ARW.Model.Vo; +using ARW.Model; +using ARW.Model.Vo.Chat; + +namespace ARW.Service.Business.IBusinessService.Chat +{ + public interface IApplyService : IBaseService + { + + PagedInfo GetApplyList(ApplyQueryDto parm); + + } +} diff --git a/ARW-net/ARW.Service/Business/IBusinessService/Chat/IChatLogService.cs b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IChatLogService.cs new file mode 100644 index 0000000..6fb81ec --- /dev/null +++ b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IChatLogService.cs @@ -0,0 +1,30 @@ +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Model; +using ARW.Model.Vo.Chat; +using System.Collections.Generic; + +namespace ARW.Service.Business.IBusinessService.Chat +{ + public interface IChatLogService : IBaseService + { + List GetChatLogList(ChatLogQueryDto parm); + + PagedInfo GetChatFriendLogList(ChatLogQueryDto parm); + + PagedInfo GetChatGroupLogList(ChatLogQueryDto parm); + + List GetChatFriendHistoryLogList(ChatLogQueryDto parm); + + List GetChatGroupLogHistoryList(ChatLogQueryDto parm); + + public long AddChatFriendLog(ChatLogDto dto); + + public ChatLogVo SelfNewMsg(ChatLogQueryDto parm); + + public void Read(ChatLogQueryDto parm); + + public void GroupRead(ChatLogQueryDto parm); + + } +} diff --git a/ARW-net/ARW.Service/Business/IBusinessService/Chat/IChatLoginService.cs b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IChatLoginService.cs new file mode 100644 index 0000000..b9164e9 --- /dev/null +++ b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IChatLoginService.cs @@ -0,0 +1,37 @@ +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.Vo.Chat; + +namespace ARW.Service.Business.IBusinessService.Chat +{ + public interface IChatLoginService : IBaseService + { + /// + /// 获取聊天用户列表 + /// + /// + /// + public PagedInfo GetChatUserList(ChatUserQueryDto parm); + + /// + /// 登录 + /// + /// + /// + public ChatUser Login(ChatUserDto loginBody); + + /// + /// 注册 + /// + /// + /// + public ChatUser Register(ChatUserDto dto); + + public ChatUser FindUserByName(string name); + + public Task FindUserByGuid(long guid); + + } +} diff --git a/ARW-net/ARW.Service/Business/IBusinessService/Chat/IFriendsService.cs b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IFriendsService.cs new file mode 100644 index 0000000..c6057a8 --- /dev/null +++ b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IFriendsService.cs @@ -0,0 +1,13 @@ +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Model; +using ARW.Model.Vo.Chat; + +namespace ARW.Service.Business.IBusinessService.Chat +{ + public interface IFriendsService : IBaseService + { + + PagedInfo GetFriendsList(FriendsQueryDto parm); + } +} diff --git a/ARW-net/ARW.Service/Business/IBusinessService/Chat/IGroupService.cs b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IGroupService.cs new file mode 100644 index 0000000..fc05808 --- /dev/null +++ b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IGroupService.cs @@ -0,0 +1,13 @@ +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Model; +using ARW.Model.Vo.Chat; + +namespace ARW.Service.Business.IBusinessService.Chat +{ + public interface IGroupService : IBaseService + { + + PagedInfo GetGroupList(GroupQueryDto parm); + } +} diff --git a/ARW-net/ARW.Service/Business/IBusinessService/Chat/IGroupUserService.cs b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IGroupUserService.cs new file mode 100644 index 0000000..5eb2ac4 --- /dev/null +++ b/ARW-net/ARW.Service/Business/IBusinessService/Chat/IGroupUserService.cs @@ -0,0 +1,13 @@ +using ARW.Model.Models.Business.Chat; +using ARW.Model.Chat; +using ARW.Model; +using ARW.Model.Vo.Chat; + +namespace ARW.Service.Business.IBusinessService.Chat +{ + public interface IGroupUserService : IBaseService + { + + //PagedInfo GetFriendsList(FriendsQueryDto parm); + } +} diff --git a/ARW-net/ARW.Service/Business/IBusinessService/Crawler/ICrawlService.cs b/ARW-net/ARW.Service/Business/IBusinessService/Crawler/ICrawlService.cs new file mode 100644 index 0000000..fb66077 --- /dev/null +++ b/ARW-net/ARW.Service/Business/IBusinessService/Crawler/ICrawlService.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.Dto.Business.Crawler; +using ARW.Model.Models.Business.Crawler; +using ARW.Model.Vo.Crawler; + +namespace ARW.Service.Business.IBusinessService.Crawler +{ + public interface ICrawlService : IBaseService + { + + /// + /// 获取不羞涩分页列表 + /// + /// + /// + List GetBuxiuseList(CrawlQueryDto parm); + + + } +} diff --git a/ARW-net/ARW.Service/Business/IBusinessService/IClassService.cs b/ARW-net/ARW.Service/Business/IBusinessService/IClassService.cs new file mode 100644 index 0000000..79a2c6a --- /dev/null +++ b/ARW-net/ARW.Service/Business/IBusinessService/IClassService.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; + +namespace ARW.Service.Business.IBusinessService +{ + public interface IClassService : IBaseService + { + /// + /// 获取学生分页列表 + /// + /// + /// + PagedInfo GetClassList(ClassQueryDto parm); + + + } +} diff --git a/ARW-net/ARW.Service/Business/IBusinessService/IProductTypeService.cs b/ARW-net/ARW.Service/Business/IBusinessService/IProductTypeService.cs new file mode 100644 index 0000000..f4577b8 --- /dev/null +++ b/ARW-net/ARW.Service/Business/IBusinessService/IProductTypeService.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model.Dto.Business.Product; +using ARW.Model.Models.Business.Product; +using ARW.Model.Vo; +using ARW.Repository.Business; + +namespace ARW.Service.Business.IBusinessService +{ + public interface IProductTypeService : IBaseService + { + + List GetTreeList(ProductTypeQueryDto parm); + } +} diff --git a/ARW-net/ARW.Service/Business/IBusinessService/IStudentService.cs b/ARW-net/ARW.Service/Business/IBusinessService/IStudentService.cs new file mode 100644 index 0000000..dd7fc3a --- /dev/null +++ b/ARW-net/ARW.Service/Business/IBusinessService/IStudentService.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Model.Vo; + +namespace ARW.Service.Business.IBusinessService +{ + public interface IStudentService : IBaseService + { + /// + /// 获取学生分页列表 + /// + /// + /// + PagedInfo GetStudentList(StudentQueryDto parm); + + + } +} diff --git a/ARW-net/ARW.Service/IBaseService.cs b/ARW-net/ARW.Service/IBaseService.cs new file mode 100644 index 0000000..fcb1c49 --- /dev/null +++ b/ARW-net/ARW.Service/IBaseService.cs @@ -0,0 +1,24 @@ +using ARW.Model.Models.Business.Crawler; +using ARW.Repository; +using System; +using System.Collections.Generic; + +namespace ARW.Service +{ + /// + /// 基础服务定义 + /// + /// + public interface IBaseService : IBaseRepository where T : class, new() + { + public virtual string LoadHTML(string url) + { + throw new NotImplementedException(); + } + + public virtual int ParseMovies(string html) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Service/System/CacheService.cs b/ARW-net/ARW.Service/System/CacheService.cs new file mode 100644 index 0000000..5b9c4d6 --- /dev/null +++ b/ARW-net/ARW.Service/System/CacheService.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Common; + +namespace ARW.Service.System +{ + public class CacheService + { + #region 用户权限 缓存 + public static List GetUserPerms(string key) + { + return (List)CacheHelper.GetCache(key); + } + + public static void SetUserPerms(string key, object data) + { + CacheHelper.SetCache(key, data); + } + public static void RemoveUserPerms(string key) + { + CacheHelper.Remove(key); + } + #endregion + } +} diff --git a/ARW-net/ARW.Service/System/CommonLangService.cs b/ARW-net/ARW.Service/System/CommonLangService.cs new file mode 100644 index 0000000..a52da06 --- /dev/null +++ b/ARW-net/ARW.Service/System/CommonLangService.cs @@ -0,0 +1,124 @@ +using Infrastructure.Attribute; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using ARW.Model; +using ARW.Model.Dto; +using ARW.Model.Models; +using ARW.Repository; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 多语言配置Service业务层处理 + /// + /// @author li + /// @date 2022-05-06 + /// + [AppService(ServiceType = typeof(ICommonLangService), ServiceLifetime = LifeTime.Transient)] + public class CommonLangService : BaseService, ICommonLangService + { + private readonly CommonLangRepository _CommonLangrepository; + public CommonLangService(CommonLangRepository repository) + { + _CommonLangrepository = repository; + } + + #region 业务逻辑代码 + + /// + /// 查询多语言配置列表 + /// + /// + /// + public PagedInfo GetList(CommonLangQueryDto parm) + { + //开始拼装查询条件 + var predicate = Expressionable.Create(); + + //搜索条件查询语法参考Sqlsugar + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangCode), it => it.LangCode == parm.LangCode); + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangKey), it => it.LangKey.Contains(parm.LangKey)); + predicate = predicate.AndIF(parm.BeginAddtime != null, it => it.Addtime >= parm.BeginAddtime && it.Addtime <= parm.EndAddtime); + var response = _CommonLangrepository + .Queryable() + .Where(predicate.ToExpression()) + .ToPage(parm); + return response; + } + + /// + /// 行转列 + /// + /// + /// + public dynamic GetListToPivot(CommonLangQueryDto parm) + { + //开始拼装查询条件 + var predicate = Expressionable.Create(); + + //搜索条件查询语法参考Sqlsugar + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangCode), it => it.LangCode == parm.LangCode); + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangKey), it => it.LangKey.Contains(parm.LangKey)); + predicate = predicate.AndIF(parm.BeginAddtime != null, it => it.Addtime >= parm.BeginAddtime && it.Addtime <= parm.EndAddtime); + var response = _CommonLangrepository + .Queryable() + .Where(predicate.ToExpression()) + .ToPivotList(it => it.LangCode, it => it.LangKey, it => it.Max(f => f.LangName)); + return response; + } + + public List GetLangList(CommonLangQueryDto parm) + { + //开始拼装查询条件 + var predicate = Expressionable.Create(); + + //搜索条件查询语法参考Sqlsugar + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangCode), it => it.LangCode == parm.LangCode); + //predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangKey), it => it.LangKey.Contains(parm.LangKey)); + var response = _CommonLangrepository + .Queryable() + .Where(predicate.ToExpression()) + .ToList(); + return response; + } + + public void StorageCommonLang(CommonLangDto parm) + { + List langs = new(); + foreach (var item in parm.LangList) + { + langs.Add(new CommonLang() + { + Addtime = DateTime.Now, + LangKey = parm.LangKey, + LangCode = item.LangCode, + LangName = item.LangName, + }); + } + var storage = _CommonLangrepository.Storageable(langs) + .WhereColumns(it => new { it.LangKey, it.LangCode }) + .ToStorage(); + + storage.AsInsertable.ExecuteReturnSnowflakeIdList();//执行插入 + storage.AsUpdateable.UpdateColumns(it => new { it.LangName }).ExecuteCommand();//执行修改 + } + + public Dictionary SetLang(List msgList) + { + Dictionary dic = new(); + + foreach (var item in msgList) + { + if (!dic.ContainsKey(item.LangKey)) + { + dic.Add(item.LangKey, item.LangName); + } + } + return dic; + } + #endregion + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Service/System/GenTableService.cs b/ARW-net/ARW.Service/System/GenTableService.cs new file mode 100644 index 0000000..70096f2 --- /dev/null +++ b/ARW-net/ARW.Service/System/GenTableService.cs @@ -0,0 +1,222 @@ +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using Newtonsoft.Json; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using ARW.Common; +using ARW.Model; +using ARW.Model.System.Generate; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 代码生成表 + /// + [AppService(ServiceType = typeof(IGenTableService), ServiceLifetime = LifeTime.Transient)] + public class GenTableService : BaseService, IGenTableService + { + private GenTableRepository GenTableRepository; + private IGenTableColumnService GenTableColumnService; + public GenTableService(IGenTableColumnService genTableColumnService, GenTableRepository genTableRepository) + { + GenTableColumnService = genTableColumnService; + GenTableRepository = genTableRepository; + } + + /// + /// 删除表 + /// + /// 需要删除的表id + /// + public int DeleteGenTableByIds(long[] tableIds) + { + GenTableRepository.Delete(f => tableIds.Contains(f.TableId)); + return GenTableColumnService.DeleteGenTableColumn(tableIds); + } + + /// + /// 删除表根据表名 + /// + /// + /// + public int DeleteGenTableByTbName(string tableName) + { + return GenTableRepository.Delete(f => f.TableName == tableName) ? 1 : 0; + } + + /// + /// 获取表信息 + /// + /// + /// + public GenTable GetGenTableInfo(long tableId) + { + var info = GenTableRepository.GetId(tableId); + if (info != null && !info.SubTableName.IsEmpty()) + { + info.SubTable = GenTableRepository.Queryable().Where(f => f.TableName == info.SubTableName).First(); + } + return info; + } + + /// + /// 获取所有代码生成表 + /// + /// + public List GetGenTableAll() + { + return GenTableRepository.GetAll(); + } + + /// + /// 查询代码生成表信息 + /// + /// + /// + /// + public PagedInfo GetGenTables(GenTable genTable, PagerInfo pagerInfo) + { + var predicate = Expressionable.Create(); + predicate = predicate.AndIF(genTable.TableName.IfNotEmpty(), it => it.TableName.Contains(genTable.TableName)); + + return GenTableRepository.GetPages(predicate.ToExpression(), pagerInfo, x => x.TableId, OrderByType.Desc); + } + + /// + /// 插入代码生成表 + /// + /// + /// + public int ImportGenTable(GenTable table) + { + table.Create_time = DateTime.Now; + //导入前删除现有表 + //DeleteGenTableByIds(new long[] { table.TableId }); + DeleteGenTableByTbName(table.TableName); + + return GenTableRepository.Context.Insertable(table).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnIdentity(); + } + + /// + /// 获取表数据 + /// + /// + /// + public List SelectDbTableListByNamess(string[] tableNames) + { + throw new NotImplementedException(); + } + + public int UpdateGenTable(GenTable genTable) + { + var db = GenTableRepository.Context; + genTable.Update_time = db.GetDate(); + return db.Updateable(genTable).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); + } + + /// + /// 同步数据库 + /// + /// 表id + /// + /// + public void SynchDb(long tableId, GenTable genTable, List dbTableColumns) + { + List tableColumns = GenTableColumnService.GenTableColumns(tableId); + List tableColumnNames = tableColumns.Select(f => f.ColumnName).ToList(); + List dbTableColumneNames = dbTableColumns.Select(f => f.ColumnName).ToList(); + + List insertColumns = new(); + foreach (var column in dbTableColumns) + { + if (!tableColumnNames.Contains(column.ColumnName)) + { + insertColumns.Add(column); + } + } + GenTableColumnService.Insert(insertColumns); + + List delColumns = tableColumns.FindAll(column => !dbTableColumneNames.Contains(column.ColumnName)); + if (delColumns != null && delColumns.Count > 0) + { + GenTableColumnService.Delete(delColumns.Select(f => f.ColumnId).ToList()); + } + } + } + + /// + /// 代码生成表列 + /// + [AppService(ServiceType = typeof(IGenTableColumnService), ServiceLifetime = LifeTime.Transient)] + public class GenTableColumnService : BaseService, IGenTableColumnService + { + + private GenTableColumnRepository GetTableColumnRepository; + public GenTableColumnService(GenTableColumnRepository genTableColumnRepository) + { + GetTableColumnRepository = genTableColumnRepository; + } + /// + /// 删除表字段 + /// + /// + /// + public int DeleteGenTableColumn(long tableId) + { + return GetTableColumnRepository.DeleteGenTableColumn(new long[] { tableId }); + } + /// + /// 根据表id批量删除表字段 + /// + /// + /// + public int DeleteGenTableColumn(long[] tableId) + { + return GetTableColumnRepository.DeleteGenTableColumn(tableId); + } + + /// + /// 根据表名删除字段 + /// + /// + /// + public int DeleteGenTableColumnByTableName(string tableName) + { + return GetTableColumnRepository.DeleteGenTableColumnByTableName(tableName); + } + + /// + /// 获取表所有字段 + /// + /// + /// + public List GenTableColumns(long tableId) + { + return GetTableColumnRepository.GenTableColumns(tableId); + } + + /// + /// 插入表字段 + /// + /// + /// + public int InsertGenTableColumn(List tableColumn) + { + return GetTableColumnRepository.InsertGenTableColumn(tableColumn); + } + + /// + /// 批量更新表字段 + /// + /// + /// + public int UpdateGenTableColumn(List tableColumn) + { + return GetTableColumnRepository.UpdateGenTableColumn(tableColumn); + } + } +} diff --git a/ARW-net/ARW.Service/System/IService/ICommonLangService.cs b/ARW-net/ARW.Service/System/IService/ICommonLangService.cs new file mode 100644 index 0000000..9a69092 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ICommonLangService.cs @@ -0,0 +1,24 @@ +using System; +using ARW.Model; +using ARW.Model.Dto; +using ARW.Model.Models; +using System.Collections.Generic; + +namespace ARW.Service.System.IService +{ + /// + /// 多语言配置service接口 + /// + /// @author + /// + /// @date 2022-05-06 + /// + public interface ICommonLangService : IBaseService + { + PagedInfo GetList(CommonLangQueryDto parm); + List GetLangList(CommonLangQueryDto parm); + dynamic GetListToPivot(CommonLangQueryDto parm); + void StorageCommonLang(CommonLangDto parm); + Dictionary SetLang(List msgList); + } +} diff --git a/ARW-net/ARW.Service/System/IService/IGenTableService.cs b/ARW-net/ARW.Service/System/IService/IGenTableService.cs new file mode 100644 index 0000000..16ef667 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/IGenTableService.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using ARW.Model; +using ARW.Model.System.Generate; + +namespace ARW.Service.System.IService +{ + public interface IGenTableService : IBaseService + { + List SelectDbTableListByNamess(string[] tableNames); + + int ImportGenTable(GenTable tables); + + int DeleteGenTableByIds(long[] tableIds); + int DeleteGenTableByTbName(string tableName); + PagedInfo GetGenTables(GenTable genTable, PagerInfo pagerInfo); + GenTable GetGenTableInfo(long tableId); + void SynchDb(long tableId, GenTable genTable, List dbTableColumns); + List GetGenTableAll(); + int UpdateGenTable(GenTable genTable); + } + + public interface IGenTableColumnService : IBaseService + { + int InsertGenTableColumn(List tableColumn); + + int DeleteGenTableColumn(long tableId); + int DeleteGenTableColumn(long[] tableIds); + int DeleteGenTableColumnByTableName(string tableName); + List GenTableColumns(long tableId); + int UpdateGenTableColumn(List tableColumn); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysConfigService.cs b/ARW-net/ARW.Service/System/IService/ISysConfigService.cs new file mode 100644 index 0000000..6272bf8 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysConfigService.cs @@ -0,0 +1,16 @@ +using System; +using ARW.Model.System; + +namespace ARW.Service.System +{ + /// + /// 参数配置service接口 + /// + /// @author zhaorui + /// @date 2021-09-29 + /// + public interface ISysConfigService : IBaseService + { + SysConfig GetSysConfigByKey(string key); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysDeptService.cs b/ARW-net/ARW.Service/System/IService/ISysDeptService.cs new file mode 100644 index 0000000..836bd77 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysDeptService.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; +using ARW.Model.System; +using ARW.Model.System.Vo; + +namespace ARW.Service.System.IService +{ + public interface ISysDeptService : IBaseService + { + List GetSysDepts(SysDept dept); + string CheckDeptNameUnique(SysDept dept); + int InsertDept(SysDept dept); + int UpdateDept(SysDept dept); + void UpdateDeptChildren(long deptId, string newAncestors, string oldAncestors); + List GetChildrenDepts(List depts, long deptId); + List BuildDeptTree(List depts); + List BuildDeptTreeSelect(List depts); + List SelectRoleDeptByRoleId(long roleId); + + List SelectRoleDepts(long roleId); + bool DeleteRoleDeptByRoleId(long roleId); + int InsertRoleDepts(SysRole role); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysDictDataService.cs b/ARW-net/ARW.Service/System/IService/ISysDictDataService.cs new file mode 100644 index 0000000..ac50b5e --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysDictDataService.cs @@ -0,0 +1,20 @@ +using Infrastructure.Model; +using System; +using System.Collections.Generic; +using System.Text; +using ARW.Model; +using ARW.Model.System; + +namespace ARW.Service.System.IService +{ + public interface ISysDictDataService + { + public PagedInfo SelectDictDataList(SysDictData dictData, PagerInfo pagerInfo); + public List SelectDictDataByType(string dictType); + public List SelectDictDataByTypes(string[] dictTypes); + public SysDictData SelectDictDataById(long dictCode); + public long InsertDictData(SysDictData dict); + public long UpdateDictData(SysDictData dict); + public int DeleteDictDataByIds(long[] dictCodes); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysDictService.cs b/ARW-net/ARW.Service/System/IService/ISysDictService.cs new file mode 100644 index 0000000..2222e31 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysDictService.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using System.Text; +using ARW.Model; +using ARW.Model.System; + +namespace ARW.Service.System.IService +{ + /// + /// + /// + public interface ISysDictService + { + public List GetAll(); + public PagedInfo SelectDictTypeList(SysDictType dictType, Model.PagerInfo pager); + + /// + /// 校验字典类型称是否唯一 + /// + /// 字典类型 + /// + public string CheckDictTypeUnique(SysDictType dictType); + + /// + /// 批量删除字典数据信息 + /// + /// + /// + public int DeleteDictTypeByIds(long[] dictIds); + + /// + /// 插入字典类型 + /// + /// + /// + public long InsertDictType(SysDictType sysDictType); + + /// + /// 修改字典类型 + /// + /// + /// + public int UpdateDictType(SysDictType sysDictType); + + /// + /// 获取字典信息 + /// + /// + /// + SysDictType GetInfo(long dictId); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysFileService.cs b/ARW-net/ARW.Service/System/IService/ISysFileService.cs new file mode 100644 index 0000000..916ac66 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysFileService.cs @@ -0,0 +1,40 @@ +using Infrastructure.Attribute; +using Microsoft.AspNetCore.Http; +using System.Threading.Tasks; +using ARW.Model.Models; +using ARW.Model.System; + +namespace ARW.Service.System.IService +{ + public interface ISysFileService : IBaseService + { + Task InsertFile(SysFile file); + + /// + /// 上传文件 + /// + /// + /// + /// + /// + /// + /// 文件对象 + Task SaveFileToLocal(string rootPath, string fileName, string fileDir, string userName, IFormFile formFile); + + Task SaveFileToAliyun(SysFile file, IFormFile formFile); + /// + /// 按时间来创建文件夹 + /// + /// + /// + /// eg: 2020/11/3 + string GetdirPath(string path = "", bool byTimeStore = true); + + /// + /// 取文件名的MD5值(16位) + /// + /// 文件名,不包括扩展名 + /// + string HashFileName(string str = null); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysLoginService.cs b/ARW-net/ARW.Service/System/IService/ISysLoginService.cs new file mode 100644 index 0000000..5a99eef --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysLoginService.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Text; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; + +namespace ARW.Service.System.IService +{ + public interface ISysLoginService: IBaseService + { + /// + /// 登录 + /// + /// + /// + /// + public SysUser Login(LoginBodyDto loginBody, SysLogininfor logininfor); + + /// + /// 查询操作日志 + /// + /// + /// 分页 + /// + public PagedInfo GetLoginLog(SysLogininfor logininfoDto, PagerInfo pager); + + /// + /// 记录登录日志 + /// + /// + /// + public void AddLoginInfo(SysLogininfor sysLogininfor); + + /// + /// 清空登录日志 + /// + public void TruncateLogininfo(); + + /// + /// 删除登录日志 + /// + /// + /// + public int DeleteLogininforByIds(long[] ids); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysMenuService.cs b/ARW-net/ARW.Service/System/IService/ISysMenuService.cs new file mode 100644 index 0000000..1af76b2 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysMenuService.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Model.System.Vo; + +namespace ARW.Service.System.IService +{ + public interface ISysMenuService + { + //List SelectMenuList(long userId); + + List SelectMenuList(MenuQueryDto menu, long userId); + List SelectTreeMenuList(MenuQueryDto menu, long userId); + + SysMenu GetMenuByMenuId(int menuId); + List GetMenusByMenuId(int menuId); + int AddMenu(SysMenu menu); + + int EditMenu(SysMenu menu); + + int DeleteMenuById(int menuId); + + string CheckMenuNameUnique(SysMenu menu); + + int ChangeSortMenu(MenuDto menuDto); + + bool HasChildByMenuId(long menuId); + + List SelectMenuTreeByUserId(long userId); + + List SelectMenuPermsListByUserId(long userId); + + List SelectMenuPermsByUserId(long userId); + + bool CheckMenuExistRole(long menuId); + + List BuildMenus(List menus); + + List BuildMenuTreeSelect(List menus); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysNoticeService.cs b/ARW-net/ARW.Service/System/IService/ISysNoticeService.cs new file mode 100644 index 0000000..02fcb5c --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysNoticeService.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using ARW.Model.System; + +namespace ARW.Service.System.IService +{ + /// + /// 通知公告表service接口 + /// + /// @author + /// + /// @date 2021-12-15 + /// + public interface ISysNoticeService: IBaseService + { + List GetSysNotices(); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysOperLogService.cs b/ARW-net/ARW.Service/System/IService/ISysOperLogService.cs new file mode 100644 index 0000000..5cd03c2 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysOperLogService.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Service.System; +using Infrastructure.Model; + +namespace ARW.Service.System.IService +{ + public interface ISysOperLogService + { + public void InsertOperlog(SysOperLog operLog); + + /// + /// 查询系统操作日志集合 + /// + /// 操作日志对象 + /// + /// 操作日志集合 + public PagedInfo SelectOperLogList(SysOperLogDto operLog, PagerInfo pager); + + /// + /// 清空操作日志 + /// + public void CleanOperLog(); + + /// + /// 批量删除系统操作日志 + /// + /// 需要删除的操作日志ID + /// 结果 + public int DeleteOperLogByIds(long[] operIds); + + /// + /// 查询操作日志详细 + /// + /// 操作ID + /// 操作日志对象 + public SysOperLog SelectOperLogById(long operId); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysPermissionService.cs b/ARW-net/ARW.Service/System/IService/ISysPermissionService.cs new file mode 100644 index 0000000..074c44a --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysPermissionService.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model.System; + +namespace ARW.Service.System.IService +{ + public interface ISysPermissionService + { + public List GetRolePermission(SysUser user); + public List GetMenuPermission(SysUser user); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysPostService.cs b/ARW-net/ARW.Service/System/IService/ISysPostService.cs new file mode 100644 index 0000000..1226d04 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysPostService.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; +using ARW.Model.System; +using ARW.Repository; + +namespace ARW.Service.System.IService +{ + public interface ISysPostService : IBaseService + { + string CheckPostNameUnique(SysPost sysPost); + string CheckPostCodeUnique(SysPost sysPost); + List GetAll(); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysRoleService.cs b/ARW-net/ARW.Service/System/IService/ISysRoleService.cs new file mode 100644 index 0000000..866d337 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysRoleService.cs @@ -0,0 +1,141 @@ +using System.Collections.Generic; +using ARW.Model; +using ARW.Model.System; + +namespace ARW.Service.System.IService +{ + public interface ISysRoleService : IBaseService + { + /// + /// 根据条件分页查询角色数据 + /// + /// 角色信息 + /// + /// 角色数据集合信息 + public PagedInfo SelectRoleList(SysRole role, PagerInfo pager); + + /// + /// 查询所有角色 + /// + /// + /// + public List SelectRoleAll(); + + /// + /// 根据用户查询 + /// + /// + /// + public List SelectRolePermissionByUserId(long userId); + + /// + /// 通过角色ID查询角色 + /// + /// 角色ID + /// 角色对象信息 + public SysRole SelectRoleById(long roleId); + + /// + /// 批量删除角色信息 + /// + /// 需要删除的角色ID + /// + public int DeleteRoleByRoleId(long[] roleIds); + + /// + /// 更改角色权限状态 + /// + /// + /// + public int UpdateRoleStatus(SysRole roleDto); + + /// + /// 校验角色权限是否唯一 + /// + /// 角色信息 + /// + public string CheckRoleKeyUnique(SysRole sysRole); + + /// + /// 校验角色是否允许操作 + /// + /// + public void CheckRoleAllowed(SysRole role); + + /// + /// 新增保存角色信息 + /// + /// 角色信息 + /// + public long InsertRole(SysRole sysRole); + + /// + /// 通过角色ID删除角色和菜单关联 + /// + /// 角色ID + /// + public int DeleteRoleMenuByRoleId(long roleId); + + /// + /// 授权数据范围 + /// + /// + /// + bool AuthDataScope(SysRole role); + #region Service + + + /// + /// 新增角色菜单信息 + /// + /// + /// + public int InsertRoleMenu(SysRole sysRoleDto); + + /// + /// 判断是否是管理员 + /// + /// + /// + public bool IsAdmin(long userid); + + /// + /// 获取角色菜单id集合 + /// + /// + /// + public List SelectUserRoleMenus(long roleId); + List SelectRoleMenuByRoleIds(long[] roleIds); + /// + /// 获取用户角色列表 + /// + /// + /// + public List SelectUserRoleListByUserId(long userId); + + /// + /// 获取用户权限集合 + /// + /// + /// + public List SelectUserRoles(long userId); + + /// + /// 获取用户权限字符串集合 + /// + /// + /// + public List SelectUserRoleKeys(long userId); + + public List SelectUserRoleNames(long userId); + + #endregion + + /// + /// 修改保存角色信息 + /// + /// 角色信息 + /// + public int UpdateRole(SysRole sysRole); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysTasksLogService.cs b/ARW-net/ARW.Service/System/IService/ISysTasksLogService.cs new file mode 100644 index 0000000..a11cb31 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysTasksLogService.cs @@ -0,0 +1,16 @@ +using System.Threading.Tasks; +using ARW.Model.System; +using ARW.Repository; + +namespace ARW.Service.System.IService +{ + public interface ISysTasksLogService : IBaseService + { + /// + /// 记录任务执行日志 + /// + /// + //public int AddTaskLog(string jobId); + Task AddTaskLog(string jobId, SysTasksLog tasksLog); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysTasksQzService.cs b/ARW-net/ARW.Service/System/IService/ISysTasksQzService.cs new file mode 100644 index 0000000..29a6be6 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysTasksQzService.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model.System; + +namespace ARW.Service.System.IService +{ + public interface ISysTasksQzService : IBaseService + { + //SysTasksQz GetId(object id); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysUserPostService.cs b/ARW-net/ARW.Service/System/IService/ISysUserPostService.cs new file mode 100644 index 0000000..feeeb63 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysUserPostService.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using ARW.Model.System; + +namespace ARW.Service.System.IService +{ + public interface ISysUserPostService + { + public void InsertUserPost(SysUser user); + + public List GetUserPostsByUserId(long userId); + + public string GetPostsStrByUserId(long userId); + bool Delete(long userId); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysUserRoleService.cs b/ARW-net/ARW.Service/System/IService/ISysUserRoleService.cs new file mode 100644 index 0000000..467955f --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysUserRoleService.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; + +namespace ARW.Service.System.IService +{ + public interface ISysUserRoleService + { + public int CountUserRoleByRoleId(long roleId); + + /// + /// 删除用户角色 + /// + /// + /// + public int DeleteUserRoleByUserId(int userId); + + /// + /// 批量删除角色对应用户 + /// + /// + /// + /// + public int DeleteRoleUserByUserIds(long roleId, List userIds); + + /// + /// 添加用户角色 + /// + /// + /// + public int AddUserRole(List sysUsers); + + /// + /// 获取用户数据根据角色id + /// + /// + /// + public List GetSysUsersByRoleId(long roleId); + + /// + /// 获取用户数据根据角色id + /// + /// + /// + public PagedInfo GetSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto); + + /// + /// 获取尚未指派的用户数据根据角色id + /// + /// + /// + public PagedInfo GetExcludedSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto); + + /// + /// 新增用户角色信息 + /// + /// + /// + public int InsertUserRole(SysUser user); + + /// + /// 新增加角色用户 + /// + /// 角色id + /// 用户ids + /// + public int InsertRoleUser(RoleUsersCreateDto roleUsersCreateDto); + } +} diff --git a/ARW-net/ARW.Service/System/IService/ISysUserService.cs b/ARW-net/ARW.Service/System/IService/ISysUserService.cs new file mode 100644 index 0000000..4ac5467 --- /dev/null +++ b/ARW-net/ARW.Service/System/IService/ISysUserService.cs @@ -0,0 +1,74 @@ +using ARW.Model; +using ARW.Model.System; +using ARW.Model.System.Dto; + +namespace ARW.Service.System.IService +{ + public interface ISysUserService : IBaseService + { + public PagedInfo SelectUserList(SysUser user, PagerInfo pager); + + /// + /// 通过用户ID查询用户 + /// + /// + /// + public SysUser SelectUserById(long userId); + + /// + /// 校验用户名称是否唯一 + /// + /// + /// + public string CheckUserNameUnique(string userName); + + /// + /// 新增保存用户信息 + /// + /// + /// + public long InsertUser(SysUser sysUser); + + /// + /// 修改用户信息 + /// + /// + /// + public int UpdateUser(SysUser user); + + public int ChangeUser(SysUser user); + + /// + /// 重置密码 + /// + /// + /// + /// + public int ResetPwd(long userid, string password); + + public int ChangeUserStatus(SysUser user); + + /// + /// 删除用户 + /// + /// + /// + public int DeleteUser(long userid); + + /// + /// 修改用户头像 + /// + /// + /// + public int UpdatePhoto(SysUser user); + + /// + /// 注册 + /// + /// + /// + SysUser Register(RegisterDto dto); + void CheckUserAllowed(SysUser user); + void CheckUserDataScope(long userid, long loginUserId); + } +} diff --git a/ARW-net/ARW.Service/System/SysConfigService.cs b/ARW-net/ARW.Service/System/SysConfigService.cs new file mode 100644 index 0000000..636773d --- /dev/null +++ b/ARW-net/ARW.Service/System/SysConfigService.cs @@ -0,0 +1,28 @@ +using Infrastructure.Attribute; +using ARW.Model.System; +using ARW.Repository; + +namespace ARW.Service.System +{ + /// + /// 参数配置Service业务层处理 + /// + [AppService(ServiceType = typeof(ISysConfigService), ServiceLifetime = LifeTime.Transient)] + public class SysConfigService : BaseService, ISysConfigService + { + private readonly SysConfigRepository _SysConfigrepository; + public SysConfigService(SysConfigRepository repository) + { + _SysConfigrepository = repository; + } + + #region 业务逻辑代码 + + public SysConfig GetSysConfigByKey(string key) + { + return _SysConfigrepository.Queryable().First(f => f.ConfigKey == key); + } + + #endregion + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Service/System/SysDeptService.cs b/ARW-net/ARW.Service/System/SysDeptService.cs new file mode 100644 index 0000000..fa084e2 --- /dev/null +++ b/ARW-net/ARW.Service/System/SysDeptService.cs @@ -0,0 +1,288 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using ARW.Common; +using ARW.Model.System; +using ARW.Model.System.Vo; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 部门管理 + /// + [AppService(ServiceType = typeof(ISysDeptService), ServiceLifetime = LifeTime.Transient)] + public class SysDeptService : BaseService, ISysDeptService + { + public SysDeptRepository DeptRepository; + public SysRoleDeptRepository RoleDeptRepository; + public SysDeptService(SysDeptRepository deptRepository, SysRoleDeptRepository roleDeptRepository) + { + DeptRepository = deptRepository; + RoleDeptRepository = roleDeptRepository; + } + + /// + /// 查询部门管理数据 + /// + /// + /// + public List GetSysDepts(SysDept dept) + { + //开始拼装查询条件 + var predicate = Expressionable.Create(); + predicate = predicate.And(it => it.DelFlag == "0"); + predicate = predicate.AndIF(dept.DeptName.IfNotEmpty(), it => it.DeptName.Contains(dept.DeptName)); + predicate = predicate.AndIF(dept.Status.IfNotEmpty(), it => it.Status == dept.Status); + + var response = DeptRepository.GetList(predicate.ToExpression()); + + return response; + } + + /// + /// 校验部门名称是否唯一 + /// + /// + /// + public string CheckDeptNameUnique(SysDept dept) + { + long deptId = dept.DeptId == 0 ? -1L : dept.DeptId; + SysDept info = DeptRepository.GetFirst(it => it.DeptName == dept.DeptName && it.ParentId == dept.ParentId); + if (info != null && info.DeptId != deptId) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /// + /// 新增保存部门信息 + /// + /// + /// + public int InsertDept(SysDept dept) + { + SysDept info = DeptRepository.GetFirst(it => it.DeptId == dept.ParentId); + //如果父节点不为正常状态,则不允许新增子节点 + if (info != null && !UserConstants.DEPT_NORMAL.Equals(info?.Status)) + { + throw new CustomException("部门停用,不允许新增"); + } + dept.Ancestors = ""; + if (info != null) + { + dept.Ancestors = info.Ancestors + "," + dept.ParentId; + } + return DeptRepository.Add(dept); + } + + /// + /// 修改保存部门信息 + /// + /// + /// + public int UpdateDept(SysDept dept) + { + SysDept newParentDept = DeptRepository.GetFirst(it => it.DeptId == dept.ParentId); + SysDept oldDept = DeptRepository.GetFirst(m => m.DeptId == dept.DeptId); + if (newParentDept != null && oldDept != null) + { + string newAncestors = newParentDept.Ancestors + "," + newParentDept.DeptId; + string oldAncestors = oldDept.Ancestors; + dept.Ancestors = newAncestors; + UpdateDeptChildren(dept.DeptId, newAncestors, oldAncestors); + } + int result = DeptRepository.Context.Updateable(dept).ExecuteCommand(); + if (UserConstants.DEPT_NORMAL.Equals(dept.Status) && dept.Ancestors.IfNotEmpty() + && !"0".Equals(dept.Ancestors)) + { + // 如果该部门是启用状态,则启用该部门的所有上级部门 + UpdateParentDeptStatusNormal(dept); + } + return result; + } + + /// + /// 修改该部门的父级部门状态 + /// + /// 当前部门 + private void UpdateParentDeptStatusNormal(SysDept dept) + { + long[] depts = Tools.SpitLongArrary(dept.Ancestors); + dept.Status = "0"; + dept.Update_time = DateTime.Now; + + DeptRepository.Update(dept, it => new { it.Update_by, it.Update_time, it.Status }, f => depts.Contains(f.DeptId)); + } + + /// + /// 修改子元素关系 + /// + /// 被修改的部门ID + /// 新的父ID集合 + /// 旧的父ID集合 + public void UpdateDeptChildren(long deptId, string newAncestors, string oldAncestors) + { + List children = GetChildrenDepts(GetSysDepts(new SysDept()), deptId); + + foreach (var child in children) + { + string ancestors = child.Ancestors.ReplaceFirst(oldAncestors, newAncestors); + long[] ancestorsArr = Tools.SpitLongArrary(ancestors).Distinct().ToArray(); + child.Ancestors = string.Join(",", ancestorsArr); + } + if (children.Any()) + { + DeptRepository.UdateDeptChildren(children); + } + } + + /// + /// 获取所有子部门 + /// + /// + /// + /// + public List GetChildrenDepts(List depts, long deptId) + { + return depts.FindAll(delegate (SysDept item) + { + long[] pid = Tools.SpitLongArrary(item.Ancestors); + return pid.Contains(deptId); + }); + } + + /// + /// 构建前端所需要树结构 + /// + /// 部门列表 + /// + public List BuildDeptTree(List depts) + { + List returnList = new List(); + List tempList = depts.Select(f => f.DeptId).ToList(); + foreach (var dept in depts) + { + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.Contains(dept.ParentId)) + { + RecursionFn(depts, dept); + returnList.Add(dept); + } + } + + if (!returnList.Any()) + { + returnList = depts; + } + return returnList; + } + + /// + /// 构建前端所需下拉树结构 + /// + /// + /// + public List BuildDeptTreeSelect(List depts) + { + List menuTrees = BuildDeptTree(depts); + List treeMenuVos = new List(); + foreach (var item in menuTrees) + { + treeMenuVos.Add(new TreeSelectVo(item)); + } + return treeMenuVos; + } + + /// + /// 递归列表 + /// + /// + /// + private void RecursionFn(List list, SysDept t) + { + //得到子节点列表 + List childList = GetChildList(list, t); + t.children = childList; + foreach (var item in childList) + { + if (GetChildList(list, item).Count() > 0) + { + RecursionFn(list, item); + } + } + } + /// + /// 递归获取子菜单 + /// + /// 所有菜单 + /// + /// + private List GetChildList(List list, SysDept dept) + { + return list.Where(p => p.ParentId == dept.DeptId).ToList(); + } + + #region 角色部门 + + /// + /// 根据角色获取菜单id + /// + /// + /// + public List SelectRoleDeptByRoleId(long roleId) + { + return RoleDeptRepository.SelectRoleDeptByRoleId(roleId); + } + + /// + /// 获取角色部门id集合 + /// + /// + /// + public List SelectRoleDepts(long roleId) + { + var list = SelectRoleDeptByRoleId(roleId); + + return list.Select(x => x.DeptId).Distinct().ToList(); + } + + /// + /// 删除角色部门数据 + /// + /// + /// + public bool DeleteRoleDeptByRoleId(long roleId) + { + return RoleDeptRepository.Delete(f => f.RoleId == roleId); + } + + /// + /// 批量插入角色部门 + /// + /// + /// + public int InsertRoleDepts(SysRole role) + { + int rows = 1; + List list = new(); + foreach (var item in role.DeptIds) + { + list.Add(new SysRoleDept() { DeptId = item, RoleId = role.RoleId }); + } + if (list.Count > 0) + { + rows = RoleDeptRepository.Insert(list); + } + return rows; + } + #endregion + } +} diff --git a/ARW-net/ARW.Service/System/SysDictDataService.cs b/ARW-net/ARW.Service/System/SysDictDataService.cs new file mode 100644 index 0000000..fef9a06 --- /dev/null +++ b/ARW-net/ARW.Service/System/SysDictDataService.cs @@ -0,0 +1,110 @@ +using Infrastructure.Attribute; +using Infrastructure.Model; +using System; +using System.Collections.Generic; +using System.Text; +using ARW.Common; +using ARW.Model; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 字典数据类 + /// + [AppService(ServiceType = typeof(ISysDictDataService), ServiceLifetime = LifeTime.Transient)] + public class SysDictDataService : BaseService, ISysDictDataService + { + + private readonly SysDictDataRepository SysDictDataRepository; + public SysDictDataService(SysDictDataRepository sysDictDataRepository) + { + SysDictDataRepository = sysDictDataRepository; + } + + /// + /// 查询字典数据 + /// + /// + /// + public PagedInfo SelectDictDataList(SysDictData dictData, PagerInfo pagerInfo) + { + return SysDictDataRepository.SelectDictDataList(dictData, pagerInfo); + } + + /// + /// 根据字典类型查询 + /// + /// + /// + public List SelectDictDataByType(string dictType) + { + string CK = $"SelectDictDataByType_{dictType}"; + if (CacheHelper.GetCache(CK) is not List list) + { + list = SysDictDataRepository.SelectDictDataByType(dictType); + CacheHelper.SetCache(CK, list, 30); + } + return list; + } + public List SelectDictDataByTypes(string[] dictTypes) + { + string CK = $"SelectDictDataByTypes_{dictTypes}"; + if (CacheHelper.GetCache(CK) is not List list) + { + list = SysDictDataRepository.SelectDictDataByTypes(dictTypes); + //CacheHelper.SetCache(CK, list, 30); + } + return list; + } + /// + /// 根据字典数据ID查询信息 + /// + /// + /// + public SysDictData SelectDictDataById(long dictCode) + { + string CK = $"SelectDictDataByCode_{dictCode}"; + if (CacheHelper.GetCache(CK) is not SysDictData list) + { + list = SysDictDataRepository.GetFirst(f => f.DictCode == dictCode); + CacheHelper.SetCache(CK, list, 5); + } + return list; + } + + /// + /// 插入数据 + /// + /// + /// + public long InsertDictData(SysDictData dict) + { + return SysDictDataRepository.InsertDictData(dict); + } + + /// + /// 修改数据 + /// + /// + /// + public long UpdateDictData(SysDictData dict) + { + var result = SysDictDataRepository.UpdateDictData(dict); + CacheHelper.Remove($"SelectDictDataByCode_{dict.DictCode}"); + return result; + } + + /// + /// 批量删除字典数据信息 + /// + /// + /// + public int DeleteDictDataByIds(long[] dictCodes) + { + return SysDictDataRepository.DeleteDictDataByIds(dictCodes); + } + } +} diff --git a/ARW-net/ARW.Service/System/SysDictService.cs b/ARW-net/ARW.Service/System/SysDictService.cs new file mode 100644 index 0000000..05cbb45 --- /dev/null +++ b/ARW-net/ARW.Service/System/SysDictService.cs @@ -0,0 +1,115 @@ +using Infrastructure; +using Infrastructure.Attribute; +using System.Collections.Generic; +using System.Text; +using ARW.Model; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 字典类型 + /// + [AppService(ServiceType = typeof(ISysDictService), ServiceLifetime = LifeTime.Transient)] + public class SysDictService : BaseService, ISysDictService + { + private SysDictRepository DictRepository; + private SysDictDataRepository DictDataRepository; + + public SysDictService(SysDictRepository sysDictRepository, SysDictDataRepository dictDataRepository) + { + this.DictRepository = sysDictRepository; + this.DictDataRepository = dictDataRepository; + } + public List GetAll() + { + return DictRepository.GetAll(); + } + + /// + /// 查询字段类型列表 + /// + /// 实体模型 + /// + public PagedInfo SelectDictTypeList(SysDictType dictType, Model.PagerInfo pager) + { + return DictRepository.SelectDictTypeList(dictType, pager); + } + + /// + /// 校验字典类型称是否唯一 + /// + /// 字典类型 + /// + public string CheckDictTypeUnique(SysDictType dictType) + { + SysDictType sysDictType = DictRepository.GetFirst(f => f.DictType == dictType.DictType); + if (sysDictType != null && sysDictType.DictId != dictType.DictId) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /// + /// 批量删除字典数据信息 + /// + /// + /// + public int DeleteDictTypeByIds(long[] dictIds) + { + foreach (var dictId in dictIds) + { + SysDictType dictType = DictRepository.GetFirst(x => x.DictId == dictId); + if (DictDataRepository.Count(f => f.DictType == dictType.DictType) > 0) + { + throw new CustomException($"{dictType.DictName}已分配,不能删除"); + } + } + int count = DictRepository.DeleteDictTypeByIds(dictIds); + //if (count > 0) + //{ + // DictUtils.clearDictCache(); + //} + return count; + } + + /// + /// 插入字典类型 + /// + /// + /// + public long InsertDictType(SysDictType sysDictType) + { + return DictRepository.InsertReturnBigIdentity(sysDictType); + } + + /// + /// 修改字典类型 + /// + /// + /// + public int UpdateDictType(SysDictType sysDictType) + { + SysDictType oldDict = DictRepository.GetFirst(x => x.DictId == sysDictType.DictId); + if (sysDictType.DictType != oldDict.DictType) + { + //同步修改 dict_data表里面的DictType值 + DictDataRepository.UpdateDictDataType(oldDict.DictType, sysDictType.DictType); + } + return DictRepository.UpdateDictType(sysDictType); + } + + /// + /// 获取字典信息 + /// + /// + /// + public SysDictType GetInfo(long dictId) + { + return DictRepository.GetFirst(f => f.DictId == dictId); + } + } +} diff --git a/ARW-net/ARW.Service/System/SysFileService.cs b/ARW-net/ARW.Service/System/SysFileService.cs new file mode 100644 index 0000000..e7d744c --- /dev/null +++ b/ARW-net/ARW.Service/System/SysFileService.cs @@ -0,0 +1,136 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Options; +using System; +using System.IO; +using System.Net; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using ARW.Common; +using ARW.Model.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 文件管理 + /// + [AppService(ServiceType = typeof(ISysFileService), ServiceLifetime = LifeTime.Transient)] + public class SysFileService : BaseService, ISysFileService + { + private string domainUrl = AppSettings.GetConfig("AARWYUN_OSS:domainUrl"); + private readonly ISysConfigService SysConfigService; + private OptionsSetting OptionsSetting; + public SysFileService(ISysConfigService sysConfigService, IOptions options) + { + SysConfigService = sysConfigService; + OptionsSetting = options.Value; + } + + /// + /// 存储本地 + /// + /// 存储文件夹 + /// 存储根目录 + /// 自定文件名 + /// 上传的文件流 + /// + /// + public async Task SaveFileToLocal(string rootPath, string fileName, string fileDir, string userName, IFormFile formFile) + { + string fileExt = Path.GetExtension(formFile.FileName); + fileName = (fileName.IsEmpty() ? HashFileName() : fileName) + fileExt; + + string filePath = GetdirPath(fileDir); + string finalFilePath = Path.Combine(rootPath, filePath, fileName); + double fileSize = Math.Round(formFile.Length / 1024.0, 2); + + if (!Directory.Exists(Path.GetDirectoryName(finalFilePath))) + { + Directory.CreateDirectory(Path.GetDirectoryName(finalFilePath)); + } + + using (var stream = new FileStream(finalFilePath, FileMode.Create)) + { + await formFile.CopyToAsync(stream); + } + string uploadUrl = OptionsSetting.Upload.UploadUrl; + string accessPath = string.Concat(uploadUrl, "/", filePath.Replace("\\", "/"), "/", fileName); + SysFile file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", filePath, userName) + { + StoreType = (int)Infrastructure.Enums.StoreType.LOCAL, + FileType = formFile.ContentType, + FileUrl = finalFilePath.Replace("\\", "/"), + AccessUrl = accessPath + }; + file.Id = await InsertFile(file); + return file; + } + + /// + /// 上传文件到阿里云 + /// + /// + /// + /// + public async Task SaveFileToAliyun(SysFile file, IFormFile formFile) + { + file.FileName = (file.FileName.IsEmpty() ? HashFileName() : file.FileName) + file.FileExt; + file.StorePath = GetdirPath(file.StorePath); + string finalPath = Path.Combine(file.StorePath, file.FileName); + HttpStatusCode statusCode = AliyunOssHelper.PutObjectFromFile(formFile.OpenReadStream(), finalPath, ""); + if (statusCode != HttpStatusCode.OK) return file; + + file.StorePath = file.StorePath; + file.FileUrl = finalPath; + file.AccessUrl = string.Concat(domainUrl, "/", file.StorePath.Replace("\\", "/"), "/", file.FileName); + file.Id = await InsertFile(file); + + return file; + } + + /// + /// 获取文件存储目录 + /// + /// + /// 是否按年月日存储 + /// + public string GetdirPath(string storePath = "", bool byTimeStore = true) + { + DateTime date = DateTime.Now; + string timeDir = date.ToString("yyyyMMdd"); + + if (!string.IsNullOrEmpty(storePath)) + { + timeDir = Path.Combine(storePath, timeDir); + } + return timeDir; + } + + public string HashFileName(string str = null) + { + if (string.IsNullOrEmpty(str)) + { + str = Guid.NewGuid().ToString(); + } + MD5 md5 = MD5.Create(); + return BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(str)), 4, 8).Replace("-", ""); + } + + public Task InsertFile(SysFile file) + { + try + { + return Insertable(file).ExecuteReturnSnowflakeIdAsync();//单条插入返回雪花ID; + } + catch (Exception ex) + { + Console.WriteLine("存储图片失败" + ex.Message); + throw new Exception(ex.Message); + } + } + } +} diff --git a/ARW-net/ARW.Service/System/SysLoginService.cs b/ARW-net/ARW.Service/System/SysLoginService.cs new file mode 100644 index 0000000..da44a4b --- /dev/null +++ b/ARW-net/ARW.Service/System/SysLoginService.cs @@ -0,0 +1,106 @@ +using Infrastructure; +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using ARW.Common; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 登录 + /// + [AppService(ServiceType = typeof(ISysLoginService), ServiceLifetime = LifeTime.Transient)] + public class SysLoginService: BaseService, ISysLoginService + { + private SysLogininfoRepository SysLogininfoRepository; + + public SysLoginService(SysLogininfoRepository sysLogininfo) + { + SysLogininfoRepository = sysLogininfo; + } + + /// + /// 登录验证 + /// + /// + /// + public SysUser Login(LoginBodyDto loginBody, SysLogininfor logininfor) + { + //密码md5 + loginBody.Password = NETCore.Encrypt.EncryptProvider.Md5(loginBody.Password); + + SysUser user = SysLogininfoRepository.Login(loginBody); + logininfor.userName = loginBody.Username; + logininfor.status = "1"; + logininfor.loginTime = DateTime.Now; + + if (user == null || user.UserId <= 0) + { + logininfor.msg = "用户名或密码错误"; + AddLoginInfo(logininfor); + throw new CustomException(ResultCode.LOGIN_ERROR ,logininfor.msg); + } + if (user.Status == "1") + { + logininfor.msg = "该用户已禁用"; + AddLoginInfo(logininfor); + throw new CustomException(ResultCode.LOGIN_ERROR, logininfor.msg); + } + + logininfor.status = "0"; + logininfor.msg = "登录成功"; + AddLoginInfo(logininfor); + SysLogininfoRepository.UpdateLoginInfo(loginBody, user.UserId); + return user; + } + + + /// + /// 查询操作日志 + /// + /// + /// 分页 + /// + public PagedInfo GetLoginLog(SysLogininfor logininfoDto, PagerInfo pager) + { + logininfoDto.BeginTime = DateTimeHelper.GetBeginTime(logininfoDto.BeginTime, -1); + logininfoDto.EndTime = DateTimeHelper.GetBeginTime(logininfoDto.EndTime, 1); + + var list = SysLogininfoRepository.GetLoginLog(logininfoDto, pager); + return list; + } + + /// + /// 记录登录日志 + /// + /// + /// + public void AddLoginInfo(SysLogininfor sysLogininfor) + { + SysLogininfoRepository.AddLoginInfo(sysLogininfor); + } + + /// + /// 清空登录日志 + /// + public void TruncateLogininfo() + { + SysLogininfoRepository.TruncateLogininfo(); + } + + /// + /// 删除登录日志 + /// + /// + /// + public int DeleteLogininforByIds(long[] ids) + { + return SysLogininfoRepository.DeleteLogininforByIds(ids); + } + } +} diff --git a/ARW-net/ARW.Service/System/SysMenuService.cs b/ARW-net/ARW.Service/System/SysMenuService.cs new file mode 100644 index 0000000..6f118f7 --- /dev/null +++ b/ARW-net/ARW.Service/System/SysMenuService.cs @@ -0,0 +1,486 @@ +using Infrastructure.Attribute; +using System.Collections.Generic; +using System.Linq; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Model.System.Vo; +using ARW.Repository.System; +using ARW.Service.System.IService; +using ARW.Common; +using Infrastructure.Extensions; + +namespace ARW.Service +{ + /// + /// 菜单 + /// + [AppService(ServiceType = typeof(ISysMenuService), ServiceLifetime = LifeTime.Transient)] + public class SysMenuService : BaseService, ISysMenuService + { + public SysMenuRepository MenuRepository; + public ISysRoleService SysRoleService; + + public SysMenuService( + SysMenuRepository menuRepository, + ISysRoleService sysRoleService) + { + MenuRepository = menuRepository; + SysRoleService = sysRoleService; + } + + /// + /// 获取所有菜单数(菜单管理) + /// + /// + public List SelectTreeMenuList(MenuQueryDto menu, long userId) + { + List menuList; + if (SysRoleService.IsAdmin(userId)) + { + menuList = MenuRepository.SelectTreeMenuList(menu); + } + else + { + var userRoles = SysRoleService.SelectUserRoles(userId); + menuList = MenuRepository.SelectTreeMenuListByRoles(menu, userRoles); + } + return menuList; + } + + /// + /// 获取所有菜单列表 + /// + /// + public List SelectMenuList(MenuQueryDto menu, long userId) + { + List menuList; + if (SysRoleService.IsAdmin(userId)) + { + menuList = MenuRepository.SelectMenuList(menu); + } + else + { + var userRoles = SysRoleService.SelectUserRoles(userId); + menuList = MenuRepository.SelectMenuListByRoles(menu, userRoles); + } + return menuList; + } + + /// + /// 获取菜单详情 + /// + /// + /// + public SysMenu GetMenuByMenuId(int menuId) + { + return MenuRepository.SelectMenuById(menuId); + } + + /// + /// 根据菜单id获取菜单列表 + /// + /// + /// + public List GetMenusByMenuId(int menuId) + { + var list = MenuRepository.GetList(f => f.parentId == menuId).OrderBy(f => f.orderNum).ToList(); + Context.ThenMapper(list, item => + { + item.SubNum = Context.Queryable().SetContext(x => x.parentId, () => item.MenuId, item).Count; + }); + return list; + } + + /// + /// 添加菜单 + /// + /// + /// + public int AddMenu(SysMenu menu) + { + return MenuRepository.AddMenu(menu); + } + + /// + /// 编辑菜单 + /// + /// + /// + public int EditMenu(SysMenu menu) + { + menu.icon = string.IsNullOrEmpty(menu.icon) ? "" : menu.icon; + return MenuRepository.EditMenu(menu); + } + + /// + /// 删除菜单管理信息 + /// + /// + /// + public int DeleteMenuById(int menuId) + { + return MenuRepository.DeleteMenuById(menuId); + } + + /// + /// 校验菜单名称是否唯一 + /// + /// + /// + public string CheckMenuNameUnique(SysMenu menu) + { + long menuId = menu.MenuId == 0 ? -1 : menu.MenuId; + SysMenu info = MenuRepository.CheckMenuNameUnique(menu); + + //if (info != null && menuId != info.menuId && menu.menuName.Equals(info.menuName)) + //{ + // return UserConstants.NOT_UNIQUE; + //} + if (info != null && info.MenuId != menu.MenuId) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /// + /// 菜单排序 + /// + /// + /// + public int ChangeSortMenu(MenuDto menuDto) + { + return MenuRepository.ChangeSortMenu(menuDto); + } + + /// + /// 是否存在菜单子节点 + /// + /// + /// + public bool HasChildByMenuId(long menuId) + { + return MenuRepository.HasChildByMenuId(menuId) > 0; + } + + /// + /// 获取左边导航栏菜单树 + /// + /// + /// + public List SelectMenuTreeByUserId(long userId) + { + MenuQueryDto dto = new() { Status = "0", MenuTypeIds = "M,C" }; + if (SysRoleService.IsAdmin(userId)) + { + return MenuRepository.SelectTreeMenuList(dto); + } + else + { + List roleIds = SysRoleService.SelectUserRoles(userId); + return MenuRepository.SelectTreeMenuListByRoles(dto, roleIds); + } + } + + /// + /// 查询菜单权限 + /// + /// + /// + public List SelectMenuPermsListByUserId(long userId) + { + return MenuRepository.SelectMenuPermsByUserId(userId); + } + + /// + /// 查询精确到按钮的操作权限 + /// + /// + /// + public List SelectMenuPermsByUserId(long userId) + { + var menuList = SelectMenuPermsListByUserId(userId).Where(f => !string.IsNullOrEmpty(f.perms)); + + return menuList.Select(x => x.perms).Distinct().ToList(); + } + + #region RoleMenu + + /// + /// 查询菜单使用数量 + /// + /// + /// + public bool CheckMenuExistRole(long menuId) + { + return MenuRepository.CheckMenuExistRole(menuId) > 0; + } + + #endregion + + #region 方法 + + ///// + ///// 根据父节点的ID获取所有子节点 + ///// + ///// 分类表 + ///// 传入的父节点ID + ///// + //public List GetChildPerms(List list, int parentId) + //{ + // List returnList = new List(); + // var data = list.FindAll(f => f.parentId == parentId); + + // foreach (var item in data) + // { + // RecursionFn(list, item); + + // returnList.Add(item); + // } + // return returnList; + //} + + /// + /// 递归列表 + /// + /// + /// + private void RecursionFn(List list, SysMenu t) + { + //得到子节点列表 + List childList = GetChildList(list, t); + t.children = childList; + foreach (var item in childList) + { + if (GetChildList(list, item).Count() > 0) + { + RecursionFn(list, item); + } + } + } + + /// + /// 递归获取子菜单 + /// + /// 所有菜单 + /// + /// + private List GetChildList(List list, SysMenu sysMenu) + { + return list.Where(p => p.parentId == sysMenu.MenuId).ToList(); + } + + /// + /// 获取路由侧边栏,动态生成 + /// + /// + /// + public List BuildMenus(List menus) + { + List routers = new List(); + + foreach (var menu in menus) + { + RouterVo router = new() + { + Hidden = "1".Equals(menu.visible), + Name = GetRouteName(menu), + Path = GetRoutePath(menu), + Component = GetComponent(menu), + Meta = new Meta(menu.MenuName, menu.icon, "1".Equals(menu.isCache), menu.MenuNameKey, menu.path) + }; + + List cMenus = menu.children; + //是目录并且有子菜单 + if (cMenus != null && cMenus.Count > 0 && (UserConstants.TYPE_DIR.Equals(menu.menuType))) + { + router.AlwaysShow = true; + router.Redirect = "noRedirect"; + router.Children = BuildMenus(cMenus); + } + else if (IsMeunFrame(menu)) + { + router.Meta = null; + List childrenList = new(); + RouterVo children = new() + { + Path = menu.path, + Component = menu.component, + Name = string.IsNullOrEmpty(menu.path) ? "" : menu.path.ToLower(), + Meta = new Meta(menu.MenuName, menu.icon, "1".Equals(menu.isCache), menu.MenuNameKey, menu.path) + }; + childrenList.Add(children); + router.Children = childrenList; + } + else if (menu.parentId == 0 && IsInnerLink(menu)) + { + router.Meta = new Meta(menu.MenuName, menu.icon); + router.Path = "/"; + List childrenList = new(); + RouterVo children = new(); + string routerPath = InnerLinkReplaceEach(menu.path); + children.Path = routerPath; + children.Component = UserConstants.INNER_ARWNK; + children.Name = routerPath.ToLower(); + children.Meta = new Meta(menu.MenuName, menu.icon, menu.path); + childrenList.Add(children); + router.Children = childrenList; + } + routers.Add(router); + } + + return routers; + } + + /// + /// 构建前端所需要下拉树结构 + /// + /// 菜单列表 + /// 下拉树结构列表 + public List BuildMenuTree(List menus) + { + List returnList = new List(); + List tempList = menus.Select(f => f.MenuId).ToList(); + + foreach (var menu in menus) + { + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.Contains(menu.parentId)) + { + RecursionFn(menus, menu); + returnList.Add(menu); + } + } + if (!returnList.Any()) + { + returnList = menus; + } + return returnList; + } + + /// + /// 构建前端所需要下拉树结构 + /// + /// + /// + public List BuildMenuTreeSelect(List menus) + { + List menuTrees = BuildMenuTree(menus); + List treeMenuVos = new List(); + foreach (var item in menuTrees) + { + treeMenuVos.Add(new TreeSelectVo(item)); + } + return treeMenuVos; + } + + /// + /// 获取路由名称 + /// + /// 菜单信息 + /// 路由名称 + public string GetRouteName(SysMenu menu) + { + string routerName = menu.path.ToLower(); + // 非外链并且是一级目录(类型为目录) + if (IsMeunFrame(menu)) + { + routerName = string.Empty; + } + return routerName; + } + + /// + /// 获取路由路径 + /// + /// 菜单信息 + /// 路由地址 + public string GetRoutePath(SysMenu menu) + { + string routerPath = menu.path; + // 内链打开外网方式 + if (menu.parentId != 0 && IsInnerLink(menu)) + { + routerPath = InnerLinkReplaceEach(routerPath); + } + // 非外链并且是一级目录(类型为目录) + if (0 == menu.parentId && UserConstants.TYPE_DIR.Equals(menu.menuType) + && UserConstants.NO_FRAME.Equals(menu.isFrame)) + { + routerPath = "/" + menu.path; + } + else if (IsMeunFrame(menu))// 非外链并且是一级目录(类型为菜单) + { + routerPath = "/"; + } + return routerPath; + } + + /// + /// 获取组件名称 + /// + /// + /// + public string GetComponent(SysMenu menu) + { + string component = UserConstants.LAYOUT; + if (!string.IsNullOrEmpty(menu.component) && !IsMeunFrame(menu)) + { + component = menu.component; + } + else if (menu.component.IsEmpty() && menu.parentId != 0 && IsInnerLink(menu)) + { + component = UserConstants.INNER_ARWNK; + } + else if (string.IsNullOrEmpty(menu.component) && IsParentView(menu)) + { + component = UserConstants.PARENT_VIEW; + } + return component; + } + + /// + /// 是否为菜单内部跳转 + /// + /// 菜单信息 + /// + public bool IsMeunFrame(SysMenu menu) + { + return menu.parentId == 0 && UserConstants.TYPE_MENU.Equals(menu.menuType) + && menu.isFrame.Equals(UserConstants.NO_FRAME); + } + + /// + /// 是否为内链组件 + /// + /// 菜单信息 + /// 结果 + public bool IsInnerLink(SysMenu menu) + { + return menu.isFrame.Equals(UserConstants.NO_FRAME) && Tools.IsUrl(menu.path); + } + + /// + /// + /// 是否为parent_view组件 + /// + /// 菜单信息 + /// + public bool IsParentView(SysMenu menu) + { + return menu.parentId != 0 && UserConstants.TYPE_DIR.Equals(menu.menuType); + } + + /// + /// 内链域名特殊字符替换 + /// + /// + /// < returns > + public string InnerLinkReplaceEach(string path) + { + return path.IsNotEmpty() ? path.Replace(UserConstants.HTTP, "").Replace(UserConstants.HTTPS, "") : path; + } + #endregion + + } +} diff --git a/ARW-net/ARW.Service/System/SysNoticeService.cs b/ARW-net/ARW.Service/System/SysNoticeService.cs new file mode 100644 index 0000000..e2d86a1 --- /dev/null +++ b/ARW-net/ARW.Service/System/SysNoticeService.cs @@ -0,0 +1,46 @@ +using Infrastructure; +using Infrastructure.Attribute; +using SqlSugar; +using System.Collections.Generic; +using ARW.Model.Models; +using ARW.Model.System; +using ARW.Repository; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 通知公告表Service业务层处理 + /// + /// @author zr + /// @date 2021-12-15 + /// + [AppService(ServiceType = typeof(ISysNoticeService), ServiceLifetime = LifeTime.Transient)] + public class SysNoticeService : BaseService, ISysNoticeService + { + private readonly SysNoticeRepository _SysNoticerepository; + public SysNoticeService(SysNoticeRepository repository) + { + _SysNoticerepository = repository; + } + + #region 业务逻辑代码 + + /// + /// 查询系统通知 + /// + /// + public List GetSysNotices() + { + //开始拼装查询条件 + var predicate = Expressionable.Create(); + + //搜索条件查询语法参考Sqlsugar + predicate = predicate.And(m => m.Status == "0"); + return _SysNoticerepository.GetList(predicate.ToExpression()); + } + + #endregion + } +} \ No newline at end of file diff --git a/ARW-net/ARW.Service/System/SysOperLogService.cs b/ARW-net/ARW.Service/System/SysOperLogService.cs new file mode 100644 index 0000000..e3ff3b9 --- /dev/null +++ b/ARW-net/ARW.Service/System/SysOperLogService.cs @@ -0,0 +1,86 @@ +using Infrastructure; +using Infrastructure.Attribute; +using ARW.Model; +using ARW.Model.System; +using ARW.Model.System.Dto; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 操作日志 + /// + [AppService(ServiceType = typeof(ISysOperLogService), ServiceLifetime = LifeTime.Transient)] + public class SysOperLogService : BaseService, ISysOperLogService + { + public SysOperLogRepository sysOperLogRepository; + + public SysOperLogService(SysOperLogRepository sysOperLog) + { + sysOperLogRepository = sysOperLog; + } + + /// + /// 新增操作日志操作 + /// + /// 日志对象 + public void InsertOperlog(SysOperLog operLog) + { + if (operLog.operParam.Length >= 1000) + { + operLog.operParam = operLog.operParam.Substring(0, 1000); + } + sysOperLogRepository.AddSysOperLog(operLog); + } + + /// + /// 查询系统操作日志集合 + /// + /// 操作日志对象 + /// + /// 操作日志集合 + public PagedInfo SelectOperLogList(SysOperLogDto operLog, PagerInfo pager) + { + operLog.BeginTime = DateTimeHelper.GetBeginTime(operLog.BeginTime, -1); + operLog.EndTime = DateTimeHelper.GetBeginTime(operLog.EndTime, 1); + + bool isDemoMode = AppSettings.GetAppConfig("DemoMode", false); + if (isDemoMode) + { + return new PagedInfo(); + } + var list = sysOperLogRepository.GetSysOperLog(operLog, pager); + + return list; + } + + /// + /// 清空操作日志 + /// + public void CleanOperLog() + { + sysOperLogRepository.ClearOperLog(); + } + + /// + /// 批量删除系统操作日志 + /// + /// 需要删除的操作日志ID + /// 结果 + public int DeleteOperLogByIds(long[] operIds) + { + return sysOperLogRepository.DeleteOperLogByIds(operIds); + } + + /// + /// 查询操作日志详细 + /// + /// 操作ID + /// 操作日志对象 + public SysOperLog SelectOperLogById(long operId) + { + return sysOperLogRepository.SelectOperLogById(operId); + } + } +} diff --git a/ARW-net/ARW.Service/System/SysPermissionService.cs b/ARW-net/ARW.Service/System/SysPermissionService.cs new file mode 100644 index 0000000..125a86b --- /dev/null +++ b/ARW-net/ARW.Service/System/SysPermissionService.cs @@ -0,0 +1,68 @@ +using Infrastructure; +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using System.Text; +using ARW.Model.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 角色权限 + /// + [AppService(ServiceType = typeof(ISysPermissionService), ServiceLifetime = LifeTime.Transient)] + public class SysPermissionService : ISysPermissionService + { + private readonly ISysRoleService SysRoleService; + private readonly ISysMenuService SysMenuService; + + public SysPermissionService( + ISysRoleService sysRoleService, + ISysMenuService sysMenuService) + { + SysRoleService = sysRoleService; + SysMenuService = sysMenuService; + } + + /// + /// 获取角色数据权限 + /// + /// 用户信息 + /// 角色权限信息 + public List GetRolePermission(SysUser user) + { + List roles = new List(); + // 管理员拥有所有权限 + if (user.IsAdmin()) + { + roles.Add("admin"); + } + else + { + roles.AddRange(SysRoleService.SelectUserRoleKeys(user.UserId)); + } + return roles; + } + + /// + /// 获取菜单数据权限 + /// + /// 用户信息 + /// 菜单权限信息 + public List GetMenuPermission(SysUser user) + { + List perms = new(); + // 管理员拥有所有权限 + if (user.IsAdmin() || GetRolePermission(user).Exists(f => f.Equals(GlobalConstant.AdminRole))) + { + perms.Add(GlobalConstant.AdminPerm); + } + else + { + perms.AddRange(SysMenuService.SelectMenuPermsByUserId(user.UserId)); + } + return perms; + } + } +} diff --git a/ARW-net/ARW.Service/System/SysPostService.cs b/ARW-net/ARW.Service/System/SysPostService.cs new file mode 100644 index 0000000..12b05ac --- /dev/null +++ b/ARW-net/ARW.Service/System/SysPostService.cs @@ -0,0 +1,59 @@ +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using System.Text; +using ARW.Model.System; +using ARW.Repository; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 岗位管理 + /// + [AppService(ServiceType = typeof(ISysPostService), ServiceLifetime = LifeTime.Transient)] + public class SysPostService : BaseService, ISysPostService + { + public SysPostRepository PostRepository; + public SysPostService(SysPostRepository postRepository) + { + PostRepository = postRepository; + } + + /// + /// 校验岗位编码是否唯一 + /// + /// + /// + public string CheckPostCodeUnique(SysPost post) + { + SysPost info = PostRepository.GetFirst(it => it.PostCode.Equals(post.PostCode)); + if (info != null && info.PostId != post.PostId) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /// + /// 校验岗位名称是否唯一 + /// + /// + /// + public string CheckPostNameUnique(SysPost post) + { + SysPost info = PostRepository.GetFirst(it => it.PostName.Equals(post.PostName)); + if (info != null && info.PostId != post.PostId) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + public List GetAll() + { + return PostRepository.GetAll(); + } + } +} diff --git a/ARW-net/ARW.Service/System/SysRoleService.cs b/ARW-net/ARW.Service/System/SysRoleService.cs new file mode 100644 index 0000000..52d0edb --- /dev/null +++ b/ARW-net/ARW.Service/System/SysRoleService.cs @@ -0,0 +1,315 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Model; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using ARW.Model; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service +{ + /// + /// 角色 + /// + [AppService(ServiceType = typeof(ISysRoleService), ServiceLifetime = LifeTime.Transient)] + public class SysRoleService : BaseService, ISysRoleService + { + private SysRoleRepository SysRoleRepository; + private ISysUserRoleService SysUserRoleService; + private ISysDeptService DeptService; + + public SysRoleService( + SysRoleRepository sysRoleRepository, + ISysUserRoleService sysUserRoleService, + ISysDeptService deptService) + { + SysRoleRepository = sysRoleRepository; + SysUserRoleService = sysUserRoleService; + DeptService = deptService; + } + + /// + /// 根据条件分页查询角色数据 + /// + /// 角色信息 + /// 分页信息 + /// 角色数据集合信息 + public PagedInfo SelectRoleList(SysRole role, PagerInfo pager) + { + return SysRoleRepository.SelectRoleList(role, pager); + } + + /// + /// 查询所有角色 + /// + /// + /// + public List SelectRoleAll() + { + return SysRoleRepository.SelectRoleList(); + } + + /// + /// 根据用户查询 + /// + /// + /// + public List SelectRolePermissionByUserId(long userId) + { + return SysRoleRepository.SelectRolePermissionByUserId(userId); + } + + /// + /// 通过角色ID查询角色 + /// + /// 角色ID + /// 角色对象信息 + public SysRole SelectRoleById(long roleId) + { + return SysRoleRepository.SelectRoleById(roleId); + } + + /// + /// 批量删除角色信息 + /// + /// 需要删除的角色ID + /// + public int DeleteRoleByRoleId(long[] roleIds) + { + foreach (var item in roleIds) + { + CheckRoleAllowed(new SysRole(item)); + SysRole role = SelectRoleById(item); + if (SysUserRoleService.CountUserRoleByRoleId(item) > 0) + { + throw new CustomException($"{role.RoleName}已分配,不能删除"); + } + } + return SysRoleRepository.DeleteRoleByRoleIds(roleIds); + } + + /// + /// 更改角色权限状态 + /// + /// + /// + public int UpdateRoleStatus(SysRole roleDto) + { + return SysRoleRepository.UpdateRoleStatus(roleDto); + } + + /// + /// 校验角色权限是否唯一 + /// + /// 角色信息 + /// + public string CheckRoleKeyUnique(SysRole sysRole) + { + long roleId = 0 == sysRole.RoleId ? -1L : sysRole.RoleId; + SysRole info = SysRoleRepository.CheckRoleKeyUnique(sysRole.RoleKey); + if (info != null && info.RoleId != roleId) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /// + /// 校验角色是否允许操作 + /// + /// + public void CheckRoleAllowed(SysRole role) + { + if (IsRoleAdmin(role.RoleId)) + { + throw new CustomException("不允许操作超级管理员角色"); + } + } + + /// + /// 新增保存角色信息 + /// + /// 角色信息 + /// + public long InsertRole(SysRole sysRole) + { + return SysRoleRepository.InsertRole(sysRole); + //return InsertRoleMenu(sysRole); + } + + /// + /// 通过角色ID删除角色和菜单关联 + /// + /// 角色ID + /// + public int DeleteRoleMenuByRoleId(long roleId) + { + return SysRoleRepository.DeleteRoleMenuByRoleId(roleId); + } + + /// + /// 修改数据权限信息 + /// + /// + /// + public bool AuthDataScope(SysRole sysRoleDto) + { + return UseTran2(() => + { + //删除角色菜单 + DeleteRoleMenuByRoleId(sysRoleDto.RoleId); + InsertRoleMenu(sysRoleDto); + }); + } + #region Service + + + /// + /// 批量新增角色菜单信息 + /// + /// + /// + public int InsertRoleMenu(SysRole sysRoleDto) + { + int rows = 1; + // 新增用户与角色管理 + List sysRoleMenus = new List(); + foreach (var item in sysRoleDto.MenuIds) + { + SysRoleMenu rm = new SysRoleMenu + { + Menu_id = item, + Role_id = sysRoleDto.RoleId, + Create_by = sysRoleDto.Create_by, + Create_time = DateTime.Now + }; + sysRoleMenus.Add(rm); + } + //添加角色菜单 + if (sysRoleMenus.Count > 0) + { + rows = SysRoleRepository.AddRoleMenu(sysRoleMenus); + } + + return rows; + } + + /// + /// 判断是否是管理员 + /// + /// + /// + public bool IsAdmin(long userid) + { + List roles = SelectUserRoleKeys(userid); + + return ((IList)roles).Contains("admin"); + } + + /// + /// 判断是否是管理员 + /// + /// + /// + public bool IsRoleAdmin(long roleid) + { + var roleInfo = GetFirst(x => x.RoleId == roleid); + + return roleInfo.RoleKey == "admin"; + } + + /// + /// 获取角色菜单id集合 + /// + /// + /// + public List SelectUserRoleMenus(long roleId) + { + var list = SysRoleRepository.SelectRoleMenuByRoleId(roleId); + + return list.Select(x => x.Menu_id).Distinct().ToList(); + } + + /// + /// 根据用户所有角色获取菜单 + /// + /// + /// + public List SelectRoleMenuByRoleIds(long[] roleIds) + { + return SysRoleRepository.SelectRoleMenuByRoleIds(roleIds) + .Select(x => x.Menu_id) + .Distinct().ToList(); + } + + /// + /// 获取用户角色列表 + /// + /// + /// + public List SelectUserRoleListByUserId(long userId) + { + return SysRoleRepository.SelectUserRoleListByUserId(userId); + } + + /// + /// 获取用户权限集合 + /// + /// + /// + public List SelectUserRoles(long userId) + { + var list = SelectUserRoleListByUserId(userId).Where(f => f.Status == "0"); + + return list.Select(x => x.RoleId).ToList(); + } + + /// + /// 获取用户权限字符串集合 + /// + /// + /// + public List SelectUserRoleKeys(long userId) + { + var list = SelectUserRoleListByUserId(userId); + return list.Select(x => x.RoleKey).ToList(); + } + + /// + /// 获取用户所有角色名 + /// + /// + /// + public List SelectUserRoleNames(long userId) + { + var list = SelectUserRoleListByUserId(userId); + return list.Select(x => x.RoleName).ToList(); + } + #endregion + + /// + /// 修改保存角色信息 + /// + /// 角色信息 + /// + public int UpdateRole(SysRole sysRole) + { + var result = UseTran(() => + { + //修改角色信息 + SysRoleRepository.UpdateSysRole(sysRole); + //删除角色与部门管理 + DeptService.DeleteRoleDeptByRoleId(sysRole.RoleId); + //插入角色部门数据 + DeptService.InsertRoleDepts(sysRole); + }); + + return result.IsSuccess ? 1 : 0; + } + } +} diff --git a/ARW-net/ARW.Service/System/SysTasksLogService.cs b/ARW-net/ARW.Service/System/SysTasksLogService.cs new file mode 100644 index 0000000..aee3e54 --- /dev/null +++ b/ARW-net/ARW.Service/System/SysTasksLogService.cs @@ -0,0 +1,42 @@ +using Infrastructure.Attribute; +using System; +using System.Linq.Expressions; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.System; +using ARW.Repository; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 任务日志 + /// + [AppService(ServiceLifetime = LifeTime.Transient, ServiceType = typeof(ISysTasksLogService))] + public class SysTasksLogService : BaseService, ISysTasksLogService + { + private ISysTasksQzService _tasksQzService; + public SysTasksLogService(ISysTasksQzService tasksQzService) + { + _tasksQzService = tasksQzService; + } + + public async Task AddTaskLog(string jobId, SysTasksLog logModel) + { + //获取任务信息 + var model = await _tasksQzService.GetSingleAsync(f => f.ID.ToString() == jobId); + + if (model != null) + { + logModel.JobId = jobId; + logModel.JobName = model.Name; + logModel.JobGroup = model.JobGroup; + logModel.CreateTime = DateTime.Now; + } + + await InsertAsync(logModel); + return logModel; + } + + } +} diff --git a/ARW-net/ARW.Service/System/SysTasksQzService.cs b/ARW-net/ARW.Service/System/SysTasksQzService.cs new file mode 100644 index 0000000..ad78cfa --- /dev/null +++ b/ARW-net/ARW.Service/System/SysTasksQzService.cs @@ -0,0 +1,18 @@ +using Infrastructure.Attribute; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 定时任务 + /// + [AppService(ServiceType = typeof(ISysTasksQzService), ServiceLifetime = LifeTime.Transient)] + public class SysTasksQzService : BaseService, ISysTasksQzService + { + public SysTasksQzService(SysTasksQzRepository repository) + { + } + } +} diff --git a/ARW-net/ARW.Service/System/SysUserPostService.cs b/ARW-net/ARW.Service/System/SysUserPostService.cs new file mode 100644 index 0000000..9179409 --- /dev/null +++ b/ARW-net/ARW.Service/System/SysUserPostService.cs @@ -0,0 +1,67 @@ +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 用户岗位 + /// + [AppService(ServiceType = typeof(ISysUserPostService), ServiceLifetime = LifeTime.Transient)] + public class SysUserPostService : ISysUserPostService + { + private SysUserPostRepository UserPostRepository; + public SysUserPostService(SysUserPostRepository userPostRepository) + { + UserPostRepository = userPostRepository; + } + + /// + /// 新增用户岗位信息 + /// + /// + public void InsertUserPost(SysUser user) + { + // 新增用户与岗位管理 + List list = new List(); + foreach (var item in user.PostIds) + { + list.Add(new SysUserPost() { PostId = item, UserId = user.UserId }); + } + UserPostRepository.Insert(list); + } + + + /// + /// 查询用户岗位集合 + /// + /// + /// + public List GetUserPostsByUserId(long userId) + { + var list = UserPostRepository.GetList(f => f.UserId == userId); + return list.Select(x => x.PostId).ToList(); + } + + /// + /// 获取用户岗位 + /// + /// + /// + public string GetPostsStrByUserId(long userId) + { + var list = UserPostRepository.SelectPostsByUserId(userId); + return string.Join(',', list.Select(x => x.PostName)); + } + + public bool Delete(long userId) + { + return UserPostRepository.Delete(x => x.UserId == userId); + } + } +} diff --git a/ARW-net/ARW.Service/System/SysUserRoleService.cs b/ARW-net/ARW.Service/System/SysUserRoleService.cs new file mode 100644 index 0000000..5465dbc --- /dev/null +++ b/ARW-net/ARW.Service/System/SysUserRoleService.cs @@ -0,0 +1,131 @@ +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using System.Text; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service.System +{ + /// + /// 用户角色 + /// + [AppService(ServiceType = typeof(ISysUserRoleService), ServiceLifetime = LifeTime.Transient)] + public class SysUserRoleService : ISysUserRoleService + { + public SysUserRoleRepository SysUserRoleRepository; + + public SysUserRoleService(SysUserRoleRepository sysUserRoleRepository) + { + SysUserRoleRepository = sysUserRoleRepository; + } + + + /// + /// 通过角色ID查询角色使用数量 + /// + /// + /// + public int CountUserRoleByRoleId(long roleId) + { + return SysUserRoleRepository.CountUserRoleByRoleId(roleId); + } + + /// + /// 删除用户角色 + /// + /// + /// + public int DeleteUserRoleByUserId(int userId) + { + return SysUserRoleRepository.DeleteUserRoleByUserId(userId); + } + + /// + /// 批量删除角色对应用户 + /// + /// + /// + /// + public int DeleteRoleUserByUserIds(long roleId, List userIds) + { + return SysUserRoleRepository.DeleteRoleUserByUserIds(roleId, userIds); + } + + /// + /// 添加用户角色 + /// + /// + /// + public int AddUserRole(List sysUsers) + { + return SysUserRoleRepository.AddUserRole(sysUsers); + } + + /// + /// 获取用户数据根据角色id + /// + /// + /// + public List GetSysUsersByRoleId(long roleId) + { + return SysUserRoleRepository.GetSysUsersByRoleId(roleId); + } + + /// + /// 获取用户数据根据角色id + /// + /// + /// + public PagedInfo GetSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto) + { + return SysUserRoleRepository.GetSysUsersByRoleId(roleUserQueryDto); + } + + /// + /// 获取尚未指派的用户数据根据角色id + /// + /// + /// + public PagedInfo GetExcludedSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto) + { + return SysUserRoleRepository.GetExcludedSysUsersByRoleId(roleUserQueryDto); + } + + /// + /// 新增用户角色信息 + /// + /// + /// + public int InsertUserRole(SysUser user) + { + List userRoles = new List(); + foreach (var item in user.RoleIds) + { + userRoles.Add(new SysUserRole() { RoleId = item, UserId = user.UserId }); + } + + return userRoles.Count > 0 ? AddUserRole(userRoles) : 0; + } + + /// + /// 新增加角色用户 + /// + /// 角色id + /// 用户ids + /// + public int InsertRoleUser(RoleUsersCreateDto roleUsersCreateDto) + { + List userRoles = new List(); + foreach (var item in roleUsersCreateDto.UserIds) + { + userRoles.Add(new SysUserRole() { RoleId = roleUsersCreateDto.RoleId, UserId = item }); + } + + return userRoles.Count > 0 ? AddUserRole(userRoles) : 0; + } + } +} diff --git a/ARW-net/ARW.Service/System/SysUserService.cs b/ARW-net/ARW.Service/System/SysUserService.cs new file mode 100644 index 0000000..0486e2e --- /dev/null +++ b/ARW-net/ARW.Service/System/SysUserService.cs @@ -0,0 +1,225 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Microsoft.AspNetCore.Http; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using ARW.Common; +using ARW.Model; +using ARW.Model.System; +using ARW.Model.System.Dto; +using ARW.Repository.System; +using ARW.Service.System.IService; + +namespace ARW.Service +{ + /// + /// 系统用户 + /// + [AppService(ServiceType = typeof(ISysUserService), ServiceLifetime = LifeTime.Transient)] + public class SysUserService : BaseService, ISysUserService + { + private readonly SysUserRepository UserRepository; + private readonly ISysRoleService RoleService; + private readonly ISysUserRoleService UserRoleService; + private readonly ISysUserPostService UserPostService; + + public SysUserService( + SysUserRepository userRepository, + ISysRoleService sysRoleService, + ISysUserRoleService userRoleService, + ISysUserPostService userPostService) + { + UserRepository = userRepository; + RoleService = sysRoleService; + UserRoleService = userRoleService; + UserPostService = userPostService; + } + + /// + /// 根据条件分页查询用户列表 + /// + /// + public PagedInfo SelectUserList(SysUser user, PagerInfo pager) + { + var list = UserRepository.SelectUserList(user, pager); + + return list; + } + + /// + /// 通过用户ID查询用户 + /// + /// + /// + public SysUser SelectUserById(long userId) + { + var user = UserRepository.SelectUserById(userId); + if (user != null && user.UserId > 0) + { + user.Roles = RoleService.SelectUserRoleListByUserId(userId); + user.RoleIds = user.Roles.Select(x => x.RoleId).ToArray(); + } + return user; + } + + /// + /// 校验用户名称是否唯一 + /// + /// + /// + public string CheckUserNameUnique(string userName) + { + int count = UserRepository.CheckUserNameUnique(userName); + if (count > 0) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /// + /// 新增保存用户信息 + /// + /// + /// + public long InsertUser(SysUser sysUser) + { + long userId = UserRepository.AddUser(sysUser); + sysUser.UserId = userId; + //新增用户角色信息 + UserRoleService.InsertUserRole(sysUser); + //新增用户岗位信息 + UserPostService.InsertUserPost(sysUser); + return userId; + } + + /// + /// 修改用户信息 + /// + /// + /// + public int UpdateUser(SysUser user) + { + var roleIds = RoleService.SelectUserRoles(user.UserId); + var diffArr = roleIds.Where(c => !((IList)user.RoleIds).Contains(c)).ToArray(); + var diffArr2 = user.RoleIds.Where(c => !((IList)roleIds).Contains(c)).ToArray(); + + if (diffArr.Length > 0 || diffArr2.Length > 0) + { + //删除用户与角色关联 + UserRoleService.DeleteUserRoleByUserId((int)user.UserId); + //新增用户与角色关联 + UserRoleService.InsertUserRole(user); + } + // 删除用户与岗位关联 + UserPostService.Delete(user.UserId); + // 新增用户与岗位管理 + UserPostService.InsertUserPost(user); + return UserRepository.UpdateUser(user); + } + + public int ChangeUser(SysUser user) + { + return UserRepository.UpdateUser(user); + } + + /// + /// 重置密码 + /// + /// + /// + /// + public int ResetPwd(long userid, string password) + { + return UserRepository.ResetPwd(userid, password); + } + + public int ChangeUserStatus(SysUser user) + { + return UserRepository.ChangeUserStatus(user); + } + + /// + /// 删除用户 + /// + /// + /// + public int DeleteUser(long userid) + { + CheckUserAllowed(new SysUser() { UserId = userid}); + //删除用户与角色关联 + UserRoleService.DeleteUserRoleByUserId((int)userid); + // 删除用户与岗位关联 + UserPostService.Delete(userid); + return UserRepository.DeleteUser(userid); + } + + /// + /// 修改用户头像 + /// + /// + /// + public int UpdatePhoto(SysUser user) + { + return UserRepository.UpdatePhoto(user); + } + + /// + /// 注册用户 + /// + /// + /// + public SysUser Register(RegisterDto dto) + { + //密码md5 + string password = NETCore.Encrypt.EncryptProvider.Md5(dto.Password); + if (!Tools.PasswordStrength(dto.Password)) + { + throw new CustomException("密码强度不符合要求"); + } + SysUser user = new() + { + Create_time = DateTime.Now, + UserName = dto.Username, + NickName = dto.Username, + Password = password, + Status = "0", + DeptId = 0, + Remark = "用户注册" + }; + + user.UserId = UserRepository.AddUser(user); + return user; + } + + /// + /// 校验角色是否允许操作 + /// + /// + public void CheckUserAllowed(SysUser user) + { + if (user.IsAdmin()) + { + throw new CustomException("不允许操作超级管理员角色"); + } + } + + /// + /// 校验用户是否有数据权限 + /// + /// + /// + public void CheckUserDataScope(long userid, long loginUserId) + { + if (!SysUser.IsAdmin(loginUserId)) + { + SysUser user = new SysUser() { UserId = userid}; + + //TODO 判断用户是否有数据权限 + } + } + } +} diff --git a/ARW-net/ARW.Tasks/ARW.Tasks.csproj b/ARW-net/ARW.Tasks/ARW.Tasks.csproj new file mode 100644 index 0000000..a108578 --- /dev/null +++ b/ARW-net/ARW.Tasks/ARW.Tasks.csproj @@ -0,0 +1,21 @@ + + + + net6.0 + ARW.Tasks + ARW.Tasks + + + + + + + + + + + + + + + diff --git a/ARW-net/ARW.Tasks/ITaskSchedulerServer.cs b/ARW-net/ARW.Tasks/ITaskSchedulerServer.cs new file mode 100644 index 0000000..15640f7 --- /dev/null +++ b/ARW-net/ARW.Tasks/ITaskSchedulerServer.cs @@ -0,0 +1,28 @@ +using Infrastructure.Model; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using ARW.Model.System; + +namespace ARW.Tasks +{ + public interface ITaskSchedulerServer + { + Task StartTaskScheduleAsync(); + + Task StopTaskScheduleAsync(); + + Task AddTaskScheduleAsync(SysTasksQz tasksQz); + + Task PauseTaskScheduleAsync(SysTasksQz tasksQz); + + Task ResumeTaskScheduleAsync(SysTasksQz tasksQz); + + Task DeleteTaskScheduleAsync(SysTasksQz tasksQz); + + Task RunTaskScheduleAsync(SysTasksQz tasksQz); + + Task UpdateTaskScheduleAsync(SysTasksQz tasksQz); + } +} diff --git a/ARW-net/ARW.Tasks/JobFactory.cs b/ARW-net/ARW.Tasks/JobFactory.cs new file mode 100644 index 0000000..b73a9ac --- /dev/null +++ b/ARW-net/ARW.Tasks/JobFactory.cs @@ -0,0 +1,51 @@ +using Microsoft.Extensions.DependencyInjection; +using Quartz; +using Quartz.Spi; +using System; + +namespace ARW.Tasks +{ + public class JobFactory : IJobFactory + { + private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + + /// + /// 注入反射获取依赖对象 + /// + private readonly IServiceProvider _serviceProvider; + public JobFactory(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + /// + /// 实现接口Job + /// + /// + /// + /// + public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler) + { + try + { + var serviceScope = _serviceProvider.CreateScope(); + var job = serviceScope.ServiceProvider.GetService(bundle.JobDetail.JobType) as IJob; + return job; + + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + logger.Error(ex, ex.Message); + throw; + } + } + + public void ReturnJob(IJob job) + { + if (job is IDisposable disposable) + { + disposable.Dispose(); + } + } + } +} diff --git a/ARW-net/ARW.Tasks/TaskScheduler/JobBase.cs b/ARW-net/ARW.Tasks/TaskScheduler/JobBase.cs new file mode 100644 index 0000000..1de7b90 --- /dev/null +++ b/ARW-net/ARW.Tasks/TaskScheduler/JobBase.cs @@ -0,0 +1,90 @@ +using Infrastructure; +using NLog; +using Quartz; +using System; +using System.Diagnostics; +using System.Threading.Tasks; +using ARW.Model.System; +using ARW.Service.System.IService; + +namespace ARW.Tasks +{ + public class JobBase + { + /// + /// 日志接口 + /// + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + + /// + /// 执行指定任务 + /// + /// 作业上下文 + /// 业务逻辑方法 + public async Task ExecuteJob(IJobExecutionContext context, Func job) + { + double elapsed = 0; + int status = 0; + string logMsg; + try + { + //var s = context.Trigger.Key.Name; + //记录Job时间 + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + //执行任务 + await job(); + stopwatch.Stop(); + elapsed = stopwatch.Elapsed.TotalMilliseconds; + logMsg = "success"; + } + catch (Exception ex) + { + JobExecutionException e2 = new(ex) + { + //true 是立即重新执行任务 + RefireImmediately = true + }; + status = 1; + logMsg = $"Fail,Exception:{ex.Message}"; + } + + var logModel = new SysTasksLog() + { + Elapsed = elapsed, + Status = status.ToString(), + JobMessage = logMsg + }; + + await RecordTaskLog(context, logModel); + return logModel; + } + + /// + /// 记录到日志 + /// + /// + /// + protected async Task RecordTaskLog(IJobExecutionContext context, SysTasksLog logModel) + { + var tasksLogService = (ISysTasksLogService)App.GetRequiredService(typeof(ISysTasksLogService)); + var taskQzService = (ISysTasksQzService)App.GetRequiredService(typeof(ISysTasksQzService)); + + // 可以直接获取 JobDetail 的值 + IJobDetail job = context.JobDetail; + + logModel.InvokeTarget = job.JobType.FullName; + logModel = await tasksLogService.AddTaskLog(job.Key.Name, logModel); + //成功后执行次数+1 + if (logModel.Status == "0") + { + await taskQzService.UpdateAsync(f => new SysTasksQz() + { + RunTimes = f.RunTimes + 1, + LastRunTime = DateTime.Now + }, f => f.ID.ToString() == job.Key.Name); + } + logger.Info($"执行任务【{job.Key.Name}|{logModel.JobName}】结果={logModel.JobMessage}"); + } + } +} diff --git a/ARW-net/ARW.Tasks/TaskScheduler/Job_HttpRequest.cs b/ARW-net/ARW.Tasks/TaskScheduler/Job_HttpRequest.cs new file mode 100644 index 0000000..f61b9c1 --- /dev/null +++ b/ARW-net/ARW.Tasks/TaskScheduler/Job_HttpRequest.cs @@ -0,0 +1,44 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Quartz; +using Quartz.Impl; +using Quartz.Impl.Triggers; +using System; +using System.Threading.Tasks; +using ARW.Service.System.IService; + +namespace ARW.Tasks.TaskScheduler +{ + /// + /// 定时任务http请求 + /// + [AppService(ServiceType = typeof(Job_HttpRequest), ServiceLifetime = LifeTime.Scoped)] + internal class Job_HttpRequest : JobBase, IJob + { + private readonly ISysTasksQzService tasksQzService; + private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + + public Job_HttpRequest(ISysTasksQzService tasksQzService) + { + this.tasksQzService = tasksQzService; + } + public async Task Execute(IJobExecutionContext context) + { + await ExecuteJob(context, async () => await Run(context)); + } + public async Task Run(IJobExecutionContext context) + { + AbstractTrigger trigger = (context as JobExecutionContextImpl).Trigger as AbstractTrigger; + var info = await tasksQzService.GetByIdAsync(trigger.Name); + if (info != null) + { + var result = await HttpHelper.HttpGetAsync("http://" + info.ApiUrl); + logger.Info($"任务【{info.Name}】网络请求执行结果=" + result); + } + else + { + throw new CustomException("任务网络请求执行失败,任务不存在"); + } + } + } +} diff --git a/ARW-net/ARW.Tasks/TaskScheduler/Job_SyncTest.cs b/ARW-net/ARW.Tasks/TaskScheduler/Job_SyncTest.cs new file mode 100644 index 0000000..9643660 --- /dev/null +++ b/ARW-net/ARW.Tasks/TaskScheduler/Job_SyncTest.cs @@ -0,0 +1,29 @@ +using Infrastructure.Attribute; +using Quartz; +using System.Threading.Tasks; + +namespace ARW.Tasks.TaskScheduler +{ + /// + /// 定时任务测试 + /// 使用如下注册后TaskExtensions里面不用再注册了 + /// + [AppService(ServiceType = typeof(Job_SyncTest), ServiceLifetime = LifeTime.Scoped)] + public class Job_SyncTest : JobBase, IJob + { + //private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + + public async Task Execute(IJobExecutionContext context) + { + await ExecuteJob(context, async () => await Run()); + } + + public async Task Run() + { + await Task.Delay(1); + //TODO 业务逻辑 + + System.Console.WriteLine("job test"); + } + } +} diff --git a/ARW-net/ARW.Tasks/TaskSchedulerServer.cs b/ARW-net/ARW.Tasks/TaskSchedulerServer.cs new file mode 100644 index 0000000..26a2823 --- /dev/null +++ b/ARW-net/ARW.Tasks/TaskSchedulerServer.cs @@ -0,0 +1,366 @@ +using Infrastructure.Model; +using NLog; +using Quartz; +using Quartz.Impl; +using Quartz.Impl.Matchers; +using Quartz.Impl.Triggers; +using Quartz.Spi; +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using ARW.Model.System; + +namespace ARW.Tasks +{ + /// + /// 计划任务中心 + /// + //[AppService] + public class TaskSchedulerServer : ITaskSchedulerServer + { + private Task _scheduler; + private readonly IJobFactory _jobFactory; + /// + /// 日志接口 + /// + private static Logger logger = LogManager.GetCurrentClassLogger(); + + public TaskSchedulerServer(IJobFactory jobFactory) + { + _scheduler = GetTaskSchedulerAsync(); + _jobFactory = jobFactory; + } + + /// + /// 开启计划任务 + /// 参考文章:https://www.quartz-scheduler.net/documentation/quartz-3.x/configuration/reference.html#datasources-ado-net-jobstores + /// + /// + private Task GetTaskSchedulerAsync() + { + if (_scheduler != null) + { + return _scheduler; + } + + NameValueCollection collection = new NameValueCollection + { + { "quartz.serializer.type","binary" }, + //quartz参数 + //{ "quartz.scheduler.instanceId", "AUTO" }, + //{ "quartz.serializer.type","json" }, + ////下面为指定quartz持久化数据库的配置 + //{ "quartz.jobStore.type","Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" }, + //{ "quartz.jobStore.tablePrefix","QRTZ_"}, + //{ "quartz.jobStore.driverDelegateType", "Quartz.Impl.AdoJobStore.MySQLDelegate, Quartz"}, + //{ "quartz.jobStore.useProperties", "true"}, + //{ "quartz.jobStore.dataSource", "myDS" }, + //{ "quartz.dataSource.myDS.connectionString", @"server=xxx.xxx.xxx.xxx;port=3306;database=Admin;uid=zrry;pwd=********;Charset=utf8;"}, + //{ "quartz.dataSource.myDS.provider", "MySql" }, + }; + + StdSchedulerFactory factory = new StdSchedulerFactory(collection); + + return _scheduler = factory.GetScheduler(); + } + + public async Task StartTaskScheduleAsync() + { + try + { + _scheduler.Result.JobFactory = _jobFactory; + if (_scheduler.Result.IsStarted) + { + return ApiResult.Error(500, $"计划任务已经开启"); + } + + //等待任务运行完成 + await _scheduler.Result.Start(); + return ApiResult.Success("计划任务开启成功"); + } + catch (Exception) + { + throw; + } + } + + /// + /// 停止计划任务 + /// + /// + public async Task StopTaskScheduleAsync() + { + try + { + if (_scheduler.Result.IsShutdown) + { + return ApiResult.Error(500, $"计划任务已经停止"); + } + + await _scheduler.Result.Shutdown(); + return ApiResult.Success("计划任务已经停止"); + } + catch (Exception) + { + throw; + } + } + + /// + /// 添加一个计划任务 + /// + /// + /// + public async Task AddTaskScheduleAsync(SysTasksQz tasksQz) + { + try + { + JobKey jobKey = new JobKey(tasksQz.ID.ToString(), tasksQz.JobGroup); + if (await _scheduler.Result.CheckExists(jobKey)) + { + return ApiResult.Error(500, $"该计划任务已经在执行:【{tasksQz.Name}】,请勿重复添加!"); + } + if (tasksQz?.EndTime <= DateTime.Now) + { + return ApiResult.Error(500, $"结束时间小于当前时间计划将不会被执行"); + } + #region 设置开始时间和结束时间 + + tasksQz.BeginTime = tasksQz.BeginTime == null ? DateTime.Now : tasksQz.BeginTime; + tasksQz.EndTime = tasksQz.EndTime == null ? DateTime.MaxValue.AddDays(-1) : tasksQz.EndTime; + + DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(tasksQz.BeginTime, 1);//设置开始时间 + DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(tasksQz.EndTime, 1);//设置暂停时间 + + #endregion + + #region 通过反射获取程序集类型和类 + + Assembly assembly = Assembly.Load(new AssemblyName(tasksQz.AssemblyName)); + Type jobType = assembly.GetType(tasksQz.AssemblyName + "." + tasksQz.ClassName); + + #endregion + //2、开启调度器。判断任务调度是否开启 + if (!_scheduler.Result.IsStarted) + { + await StartTaskScheduleAsync(); + } + + //3、创建任务。传入反射出来的执行程序集 + IJobDetail job = new JobDetailImpl(tasksQz.ID.ToString(), tasksQz.JobGroup, jobType); + job.JobDataMap.Add("JobParam", tasksQz.JobParams); + ITrigger trigger; + + //4、创建一个触发器 + if (tasksQz.Cron != null && CronExpression.IsValidExpression(tasksQz.Cron)) + { + trigger = CreateCronTrigger(tasksQz); + //解决Quartz启动后第一次会立即执行问题解决办法 + ((CronTriggerImpl)trigger).MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing; + } + else + { + trigger = CreateSimpleTrigger(tasksQz); + ((SimpleTriggerImpl)trigger).MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing; + } + + // 5、将触发器和任务器绑定到调度器中 + await _scheduler.Result.ScheduleJob(job, trigger); + //任务没有启动、暂停任务 + //if (!tasksQz.IsStart) + //{ + // _scheduler.Result.PauseJob(jobKey).Wait(); + //} + //按新的trigger重新设置job执行 + await _scheduler.Result.ResumeTrigger(trigger.Key); + return ApiResult.Success($"启动计划任务:【{tasksQz.Name}】成功!"); + } + catch (Exception ex) + { + logger.Error(ex, $"启动计划任务失败,分组:{tasksQz.JobGroup},作业:【{tasksQz.Name}】,error:{ex.Message}"); + return ApiResult.Error(500, $"启动计划任务:【{tasksQz.Name}】失败!"); + } + } + + /// + /// 暂停指定的计划任务 + /// + /// + /// + public async Task PauseTaskScheduleAsync(SysTasksQz tasksQz) + { + try + { + JobKey jobKey = new JobKey(tasksQz.ID.ToString(), tasksQz.JobGroup); + if (await _scheduler.Result.CheckExists(jobKey)) + { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + await _scheduler.Result.PauseJob(jobKey); + } + return ApiResult.Success($"暂停计划任务:【{tasksQz.Name}】成功"); + } + catch (Exception ex) + { + logger.Error(ex); + return new ApiResult(500, $"暂停计划任务:【{tasksQz.Name}】失败,{ex.Message}"); + } + } + + /// + /// 恢复指定计划任务 + /// + /// + /// + public async Task ResumeTaskScheduleAsync(SysTasksQz tasksQz) + { + try + { + JobKey jobKey = new JobKey(tasksQz.ID.ToString(), tasksQz.JobGroup); + if (!await _scheduler.Result.CheckExists(jobKey)) + { + return ApiResult.Error(500, $"未找到计划任务:【{tasksQz.Name}】"); + } + await _scheduler.Result.ResumeJob(jobKey); + return ApiResult.Success($"恢复计划任务:【{tasksQz.Name}】成功"); + } + catch (Exception) + { + throw; + } + } + + /// + /// 删除指定计划任务 + /// + /// + /// + public async Task DeleteTaskScheduleAsync(SysTasksQz tasksQz) + { + try + { + JobKey jobKey = new JobKey(tasksQz.ID.ToString(), tasksQz.JobGroup); + + //await _scheduler.Result.ScheduleJob() + + await _scheduler.Result.DeleteJob(jobKey); + return ApiResult.Success($"删除计划任务:【{tasksQz.Name}】成功"); + } + catch (Exception ex) + { + logger.Error(ex); + return ApiResult.Error($"删除计划任务:【{tasksQz.Name}】失败, error={ex.Message}"); + } + } + + /// + /// 立即运行 + /// + /// + /// + public async Task RunTaskScheduleAsync(SysTasksQz tasksQz) + { + try + { + JobKey jobKey = new JobKey(tasksQz.ID.ToString(), tasksQz.JobGroup); + List jobKeys = _scheduler.Result.GetJobKeys(GroupMatcher.GroupEquals(tasksQz.JobGroup)).Result.ToList(); + if (jobKeys == null || jobKeys.Count == 0) + { + await AddTaskScheduleAsync(tasksQz); + } + + var triggers = await _scheduler.Result.GetTriggersOfJob(jobKey); + if (triggers.Count <= 0) + { + return new ApiResult(110, $"未找到触发器[{jobKey.Name}]"); + } + await _scheduler.Result.TriggerJob(jobKey); + + return ApiResult.Success($"运行计划任务:【{tasksQz.Name}】成功"); + } + catch (Exception ex) + { + return new ApiResult(500, $"执行计划任务:【{tasksQz.Name}】失败,{ex.Message}"); + } + } + + /// + /// 更新计划任务 + /// + /// + /// + public async Task UpdateTaskScheduleAsync(SysTasksQz tasksQz) + { + try + { + JobKey jobKey = new JobKey(tasksQz.ID.ToString(), tasksQz.JobGroup); + if (await _scheduler.Result.CheckExists(jobKey)) + { + //防止创建时存在数据问题 先移除,然后在执行创建操作 + await _scheduler.Result.DeleteJob(jobKey); + } + //await AddTaskScheduleAsync(tasksQz); + return ApiResult.Success("修改计划成功"); + } + catch (Exception ex) + { + logger.Error(ex); + return ApiResult.Error($"修改计划失败,error={ex.Message}"); + } + } + + #region 创建触发器帮助方法 + + /// + /// 创建SimpleTrigger触发器(简单触发器) + /// + /// + /// + private ITrigger CreateSimpleTrigger(SysTasksQz tasksQz) + { + if (tasksQz.RunTimes > 0) + { + ITrigger trigger = TriggerBuilder.Create() + .WithIdentity(tasksQz.ID.ToString(), tasksQz.JobGroup) + .StartAt(tasksQz.BeginTime.Value) + .EndAt(tasksQz.EndTime.Value) + .WithSimpleSchedule(x => x.WithIntervalInSeconds(tasksQz.IntervalSecond) + .WithRepeatCount(tasksQz.RunTimes)).ForJob(tasksQz.ID.ToString(), tasksQz.JobGroup).Build(); + return trigger; + } + else + { + ITrigger trigger = TriggerBuilder.Create() + .WithIdentity(tasksQz.ID.ToString(), tasksQz.JobGroup) + .StartAt(tasksQz.BeginTime.Value) + .EndAt(tasksQz.EndTime.Value) + .WithSimpleSchedule(x => x.WithIntervalInSeconds(tasksQz.IntervalSecond) + .RepeatForever()).ForJob(tasksQz.ID.ToString(), tasksQz.JobGroup).Build(); + return trigger; + } + // 触发作业立即运行,然后每10秒重复一次,无限循环 + } + + /// + /// 创建类型Cron的触发器 + /// + /// + /// + private ITrigger CreateCronTrigger(SysTasksQz tasksQz) + { + // 作业触发器 + return TriggerBuilder.Create() + .WithIdentity(tasksQz.ID.ToString(), tasksQz.JobGroup) + .StartAt(tasksQz.BeginTime.Value)//开始时间 + .EndAt(tasksQz.EndTime.Value)//结束数据 + .WithCronSchedule(tasksQz.Cron)//指定cron表达式 + .ForJob(tasksQz.ID.ToString(), tasksQz.JobGroup)//作业名称 + .Build(); + } + + #endregion + + } +} diff --git a/ARW-net/ARW.WebApi/.config/dotnet-tools.json b/ARW-net/ARW.WebApi/.config/dotnet-tools.json new file mode 100644 index 0000000..82e7e22 --- /dev/null +++ b/ARW-net/ARW.WebApi/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "6.0.2", + "commands": [ + "dotnet-ef" + ] + } + } +} \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/ARW.WebApi.csproj b/ARW-net/ARW.WebApi/ARW.WebApi.csproj new file mode 100644 index 0000000..6200e53 --- /dev/null +++ b/ARW-net/ARW.WebApi/ARW.WebApi.csproj @@ -0,0 +1,58 @@ + + + net6.0 + enable + enable + True + + ARW.WebApi + ARW.WebApi + + + False + + + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always + + + diff --git a/ARW-net/ARW.WebApi/ARW.WebApi.xml b/ARW-net/ARW.WebApi/ARW.WebApi.xml new file mode 100644 index 0000000..eb04174 --- /dev/null +++ b/ARW-net/ARW.WebApi/ARW.WebApi.xml @@ -0,0 +1,1455 @@ + + + + ARW.WebApi + + + + + 基础控制器 + + + + + 时间格式化 2020-01-01 09:21:03 + + + + + 时间格式化 01-01 09:21:03 + + + + + 返回成功封装 + + + + + + + + json输出带时间格式的 + + + + + + + + + + + + + + + + + + + + + + + + 响应返回结果 + + 受影响行数 + + + + + 响应返回结果,带消息 + + + + + + + + 全局Code使用 + + + + + + + + + + + + + + + + 导出Excel + + + + + + + + + 下载导入模板 + + + + + 下载文件名 + + + + + 班级控制器 + + + + + 获取班级列表 + + 查询参数 + + + + + 添加班级 + + + + + + 更新班级 + + + + + + 删除文章 + + + + + + 产品管理Controller + + + + + 依赖注入 + + 产品类型服务 + + + + 查询产品类型列表树 + + + + + + + 添加产品类型 + + + + + + 更新产品类型 + + + + + + 删除产品类型 + + + + + + 学生控制器 + + + + + 依赖注入 + + 学生服务 + 班级服务 + + + + 获取学生列表 + + 查询参数 + + + + + 添加学生 + + 参数 + 名字 + + + + + + 更新学生 + + + + + + 删除文章 + + + + + + 获取班级列表(下拉框) + + + + + + 导出学生 + + 使用IFromFile必须使用name属性否则获取不到文件 + + + + + 学生导入模板下载 + + + + + + 导出学生 + + + + + + 公共模块 + + + + + hello + + + + + + 发送邮件 + + 请求参数接收实体 + + + + + 存储文件 + + + 存储目录 + 自定义文件名 + 上传类型1、保存到本地 2、保存到阿里云 + + + + + 存储文件到阿里云(已弃用) + + + 自定义文件名 + 上传文件夹路径 + + + + + 代码生成 + + + + + 获取所有数据库的信息 + + + + + + 获取所有表根据数据库名 + + 数据库名 + 表名 + 分页信息 + + + + + 查询生成表数据 + + 表名 + 分页信息 + + + + + 修改代码生成业务查询 + + genTable表id + + + + + 根据表id查询表列 + + genTable表id + + + + + 删除代码生成 + + + + + + + 导入表结构(保存) + + + + + + + + 修改保存代码生成业务 + + 请求参数实体 + + + + + 预览代码 + + + + + + + + 生成代码(下载方式) + + 数据传输对象 + + + + + 同步数据库 + + + + + + + + 多语言配置Controller + + + + + 多语言配置接口 + + + + + 查询多语言配置列表 + + + + + + + 查询多语言配置列表 + + + + + + 查询多语言配置详情 + + + + + + + 查询多语言配置详情 + + + + + + + 更新多语言配置 + + + + + + 删除多语言配置 + + + + + + 导出多语言配置 + + + + + + 系统监控 + + + + + 获取缓存监控数据 + + + + + + 获取服务器信息 + + + + + + 系统访问记录 + + + + + 查询登录日志 + + + + + + + + 清空登录日志 + + + + + + + + + + + + 登录日志导出 + + + + + + 操作日志记录 + + + + + 查询操作日志 + + + + + + + 删除操作日志 + + + + + + + 清空操作日志 + + + + + + 导出操作日志 + + + + + + 参数配置Controller + + + + + 参数配置接口 + + + + + 查询参数配置列表 + + + + + + 查询参数配置详情 + + + + + + + 根据参数键名查询参数值 + + + + + + + 添加参数配置 + + + + + + 更新参数配置 + + + + + + 删除参数配置 + + + + + + 部门 + + + + + 获取部门列表 + + + + + + 查询部门列表(排除节点) + + + + + + + 获取部门下拉树列表 + + + + + + + 获取角色部门信息 + 加载对应角色部门列表树 + + + + + + + 根据部门编号获取详细信息 + + + + + + 新增部门 + + + + + + + 修改部门 + + + + + + + 删除部门 + + + + + + 数据字典信息 + + + + + 搜索 + + + + + + + + 根据字典类型查询字典数据信息 + + + + + + + 根据字典类型查询字典数据信息 + + + + + + + 查询字典数据详细 + + + + + + + 添加 + + + + + + + 修改 + + + + + + + 删除字典类型 + + + + + + + 数据字典信息 + + + + + 查询 + + + + + + + + 查询字典类型详细 + + + + + + + 添加字典类型 + + + + + + + 修改字典类型 + + + + + + + 删除字典类型 + + + + + + 字典导出 + + + + + + 登录 + + + + + 登录 + + 登录对象 + + + + + 注销 + + + + + + 获取用户信息 + + + + + + 获取路由信息 + + + + + + 生成图片验证码 + + + + + + 记录用户登陆信息 + + + + + + + 注册 + + + + + + + 系统菜单 + + + + + 获取菜单列表 + + + + + + 根据菜单编号获取详细信息 + + + + + + + 根据菜单编号获取菜单列表,菜单管理首次进入 + + + + + + + 获取角色菜单信息 + 加载对应角色菜单列表树 + + + + + + + 修改菜单 + + + + + + + 添加菜单 + + + + + + + 菜单删除 + + + + + + + 保存排序 + + + + + + + + 系统通知 + + + + + 通知公告表接口 + + + + + 查询通知公告表列表 + + + + + + 查询通知公告表列表 + + + + + + 查询通知公告表详情 + + + + + + + 添加通知公告表 + + + + + + 更新通知公告表 + + + + + + 发送通知公告表 + + + + + + 删除通知公告表 + + + + + + 通知公告表导出 + + + + + + 岗位管理 + + + + + 岗位列表查询 + + + + + + 岗位查询 + + + + + + + 岗位管理 + + + + + + + 岗位管理 + + + + + + + 岗位删除 + + + + + + + 获取岗位选择框列表 + + + + + 岗位导出 + + + + + + 个人中心 + + + + + 个人中心用户信息获取 + + + + + + 修改用户 + + + + + + 修改密码 + + + + + + 修改头像 + + + + + + + 角色信息 + + + + + 获取系统角色管理 + + + + + + 根据角色编号获取详细信息 + + + + + + + 添加角色 + + + + + + + 修改角色 √ + + + + + + + 根据角色分配菜单 + + + + + + + 角色删除 + + + + + + + 修改角色状态 + + 角色对象 + + + + + 角色导出 + + + + + + 用户管理 + + + + + 用户管理 -> 获取用户 + /system/user/list + + + + + + 用户管理 -> 编辑、添加用户获取用户,信息查询 + + + + + + + 添加用户 + + + + + + + 修改用户 + + + + + + + 改变用户状态 + + + + + + + 删除用户 + + + + + + + 重置密码 + + + + + + 导入 + + 使用IFromFile必须使用name属性否则获取不到文件 + + + + + 用户导入模板下载 + + + + + + 用户导出 + + + + + + + 用户角色管理 + + + + + 根据角色编号获取已分配的用户 + + + + + + + 添加角色用户 + + + + + + 删除角色用户 + + + + + + + 获取未分配用户角色 + + + + + + + 任务日志 + + + + + 查询日志 + + + + + + + + 删除定时任务调用日志 + + + + + + + 清空日志 + + + + + + 定时任务日志导出 + + + + + + 文件存储Controller + + + + + 文件存储接口 + + + + + 查询文件存储列表 + + + + + + + 查询文件存储详情 + + + + + + + 删除文件存储 + + + + + + 文件存储导出 + + + + + + 计划任务 + + + + + 查询计划任务列表 + + + + + + 查询单个计划任务 + + 编码 + + + + + 添加任务 + + + + + + 更新任务 + + + + + + 删除任务 + + + + + + 启动任务 + + + + + + 停止任务 + + + + + + 定时任务立即执行一次 + + + + + + + 定时任务导出 + + + + + + 数据过滤 + + 多库id + + + + HttpContext扩展类 + + + + + 是否是ajax请求 + + + + + + + 获取客户端IP + + + + + + + ClaimsIdentity + + + + + + + 获取请求令牌 + + + + + + + 设置请求参数 + + + + + + + + + + + + + 定时任务扩展方法 + + + + + 程序启动后添加任务计划 + + + + + + + API授权判断 + + + + + 权限字符串,例如 system:user:view + + + + + 执行Action前校验是否有权限访问 + + + + + + + + Action请求前 + + + + + + + + OnActionExecuted是在Action中的代码执行之后运行的方法。 + + + + + + 授权校验访问 + 如果跳过授权登录在Action 或controller加上 AllowAnonymousAttribute + + + + + 只判断token是否正确,不判断权限 + 如果需要判断权限的在Action上加上ApiActionPermission属性标识权限类别,ActionPermissionFilter作权限处理 + + + + + + 2020-11-20 + + + + + 获取用户身份信息 + + + + + + + 生成token + + + + + + + + 验证Token + + + + + + 从令牌中获取数据声明 + + 令牌 + + + + + jwt token校验 + + + + + + + 组装Claims + + + + + + + + + + + + + + + + + + 客户端连接的时候调用 + + + + + + 连接终止时调用。 + + + + + + 注册信息 + + + + + + + + + 客户端连接Id + + + + + 用户id + + + + + 全局异常处理中间件 + + + + + 全局异常捕获 + 暂时没用了,改为中间件 2021-2-26 + + + + diff --git a/ARW-net/ARW.WebApi/Controllers/BaseController.cs b/ARW-net/ARW.WebApi/Controllers/BaseController.cs new file mode 100644 index 0000000..ec31ca6 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/BaseController.cs @@ -0,0 +1,203 @@ +using Infrastructure; +using Infrastructure.Model; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using OfficeOpenXml; +using System; +using System.Collections.Generic; +using System.IO; + +namespace ARW.Admin.WebApi.Controllers +{ + /// + /// 基础控制器 + /// + public class BaseController : ControllerBase + { + /// + /// 时间格式化 2020-01-01 09:21:03 + /// + public static string TIME_FORMAT_FULL = "yyyy-MM-dd HH:mm:ss"; + + /// + /// 时间格式化 01-01 09:21:03 + /// + public static string TIME_FORMAT_FULL_2 = "MM-dd HH:mm:ss"; + + /// + /// 返回成功封装 + /// + /// + /// + /// + protected IActionResult SUCCESS(object data, string timeFormatStr = "yyyy-MM-dd HH:mm:ss") + { + string jsonStr = GetJsonStr(GetApiResult(data != null ? ResultCode.SUCCESS : ResultCode.FAIL, data), timeFormatStr); + return Content(jsonStr, "application/json"); + } + + /// + /// json输出带时间格式的 + /// + /// + /// + /// + protected IActionResult ToResponse(ApiResult apiResult, string timeFormatStr = "yyyy-MM-dd HH:mm:ss") + { + string jsonStr = GetJsonStr(apiResult, timeFormatStr); + + return Content(jsonStr, "application/json"); + } + + /// + /// + /// + /// + /// + /// + protected IActionResult ToResponse(long rows, string timeFormatStr = "yyyy-MM-dd HH:mm:ss") + { + string jsonStr = GetJsonStr(ToJson(rows), timeFormatStr); + + return Content(jsonStr, "application/json"); + } + + /// + /// + /// + /// + /// + /// + protected IActionResult ToResponse(ResultCode resultCode, string msg = "") + { + return ToResponse(GetApiResult(resultCode, msg)); + } + + #region 方法 + + /// + /// 响应返回结果 + /// + /// 受影响行数 + /// + protected ApiResult ToJson(long rows) + { + return rows > 0 ? GetApiResult(ResultCode.SUCCESS) : GetApiResult(ResultCode.FAIL); + } + /// + /// 响应返回结果,带消息 + /// + /// + /// + /// + protected ApiResult ToJson(long rows, object data) + { + return rows > 0 ? GetApiResult(ResultCode.SUCCESS, data) : GetApiResult(ResultCode.FAIL); + } + /// + /// 全局Code使用 + /// + /// + /// + /// + protected ApiResult GetApiResult(ResultCode resultCode, object? data = null) + { + var apiResult = new ApiResult((int)resultCode, resultCode.ToString()) + { + Data = data + }; + + return apiResult; + } + /// + /// + /// + /// + /// + /// + protected ApiResult GetApiResult(ResultCode resultCode, string msg) + { + return new ApiResult((int)resultCode, msg); + } + private static string GetJsonStr(ApiResult apiResult, string timeFormatStr) + { + if (string.IsNullOrEmpty(timeFormatStr)) + { + timeFormatStr = TIME_FORMAT_FULL; + } + var serializerSettings = new JsonSerializerSettings + { + // 设置为驼峰命名 + ContractResolver = new CamelCasePropertyNamesContractResolver(), + DateFormatString = timeFormatStr + }; + + return JsonConvert.SerializeObject(apiResult, Formatting.Indented, serializerSettings); + } + #endregion + + /// + /// 导出Excel + /// + /// + /// + /// + /// + protected string ExportExcel(List list, string sheetName, string fileName) + { + IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment)); + string sFileName = $"{fileName}{DateTime.Now:MMddHHmmss}.xlsx"; + string newFileName = Path.Combine(webHostEnvironment.WebRootPath, "export", sFileName); + //调试模式需要加上 + ExcelPackage.LicenseContext = LicenseContext.NonCommercial; + Directory.CreateDirectory(Path.GetDirectoryName(newFileName)); + using (ExcelPackage package = new(new FileInfo(newFileName))) + { + // 添加worksheet + ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(sheetName); + //单元格自动适应大小 + worksheet.Cells.Style.ShrinkToFit = true; + //全部字段导出 + worksheet.Cells.LoadFromCollection(list, true, OfficeOpenXml.Table.TableStyles.Light13); + package.Save(); + } + + return sFileName; + } + + /// + /// 下载导入模板 + /// + /// + /// + /// + /// 下载文件名 + /// + protected string DownloadImportTemplate(List list, Stream stream, string fileName) + { + IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment)); + string sFileName = $"{fileName}模板.xlsx"; + string newFileName = Path.Combine(webHostEnvironment.WebRootPath, "importTemplate", sFileName); + //调试模式需要加上 + ExcelPackage.LicenseContext = LicenseContext.NonCommercial; + if (!Directory.Exists(newFileName)) + { + Directory.CreateDirectory(Path.GetDirectoryName(newFileName)); + } + using (ExcelPackage package = new(new FileInfo(newFileName))) + { + // 添加worksheet + ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(fileName); + //单元格自动适应大小 + worksheet.Cells.Style.ShrinkToFit = true; + //全部字段导出 + worksheet.Cells.LoadFromCollection(list, true, OfficeOpenXml.Table.TableStyles.Light13); + package.SaveAs(stream); + } + + return sFileName; + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ApplyController.cs b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ApplyController.cs new file mode 100644 index 0000000..635b614 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ApplyController.cs @@ -0,0 +1,133 @@ +using Aliyun.OSS; +using ARW.Admin.WebApi.Extensions; +using ARW.Model.Chat; +using ARW.Model.Models.Business; +using ARW.Model.Models.Business.Chat; +using ARW.Service.Business.IBusinessService; +using ARW.Service.Business.IBusinessService.Chat; +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using SqlSugar; + +namespace ARW.Admin.WebApi.Controllers.Business.Api.Chat +{ + /// + /// 申请 + /// + [Route("business/[controller]")] + public class ApplyController : BaseController + { + private readonly IApplyService _ApplyService; + private readonly IChatLoginService _ChatLoginService; + private readonly IFriendsService _FriendsService; + private readonly IGroupUserService _GroupUserService; + private readonly IGroupService _GroupService; + + public ApplyController( + IApplyService ApplyService, IFriendsService friendsService, IGroupUserService groupUserService, IGroupService groupService) + { + this._ApplyService = ApplyService; + _FriendsService = friendsService; + _GroupUserService = groupUserService; + _GroupService = groupService; + } + + /// + /// 发送申请 + /// + /// + [HttpPost("sendApply")] + public IActionResult SendApply([FromBody] ApplyDto dto) + { + if (dto == null) { throw new CustomException("请求参数错误"); } + var apply = _ApplyService.GetFirst(s => s.SenderGuId == dto.SenderGuId && s.ReceiverGuId == dto.ReceiverGuId && s.IsAgree == null); + if (apply != null) + { + throw new CustomException("已发送申请,请勿重复发送!"); + } + + + if (dto.IsGroup) + { + var groupuser = _GroupUserService.GetFirst(s => s.GroupGuId == dto.ReceiverGuId && s.UserGuId == dto.SenderGuId); + if (groupuser != null) + { + throw new CustomException("你已在群中,请勿重复添加!"); + } + + var group = _GroupService.GetFirst(s => s.GroupGuId == dto.ReceiverGuId); + var groupManager = _GroupUserService.GetFirst(s => s.GroupGuId == group.GroupGuId && s.IsGroupManager == true); + + Apply model = new Apply + { + SenderGuId = dto.SenderGuId, + ReceiverGuId = groupManager.UserGuId, + Postscript = dto.Postscript, + IsGroupApply = true + }; + + var res = _ApplyService.Insertable(model).ExecuteCommandAsync(); + return SUCCESS("已发送群申请"); + } + else + { + var user = _FriendsService.GetFirst(s => s.UserGuId == dto.SenderGuId && s.FriendsGuId == dto.ReceiverGuId); + if (user != null) + { + throw new CustomException("你们已是好友,请勿重复添加!"); + } + } + + var modal = dto.Adapt().ToCreate(HttpContext); + var response = _ApplyService.Insertable(modal).ExecuteCommandAsync(); + + return SUCCESS("已发送申请"); + } + + /// + /// 申请列表 + /// + [HttpGet("applyList")] + public IActionResult GetApplyList([FromQuery] ApplyQueryDto parm) + { + + var res = _ApplyService.GetApplyList(parm); + return SUCCESS(res); + } + + /// + /// 查看申请列表 + /// + [HttpPost("checkApply")] + public IActionResult CheckApply([FromQuery] ApplyQueryDto parm) + { + var res = _ApplyService.Update(s => s.ReceiverGuId == parm.UserGuId, + f => new Apply + { + IsRead = true, + }); + + return SUCCESS(res); + } + + /// + ///已读处理 + /// + [HttpPost("read")] + public IActionResult Read([FromBody] ApplyQueryDto parm) + { + _ApplyService.Update(s => s.ReceiverGuId == parm.UserGuId, + f => new Apply + { + IsRead = true + }); + return SUCCESS("已读"); + } + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatController.cs b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatController.cs new file mode 100644 index 0000000..a2ecca2 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatController.cs @@ -0,0 +1,64 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Service.Business.IBusinessService; +using System.Configuration; +using Microsoft.AspNetCore.SignalR; +using ARW.Admin.WebApi.Hubs; +using ARW.Model.Chat; +using ARW.Service.Business.IBusinessService.Chat; + +namespace ARW.Admin.WebApi.Controllers.Business.Api.Chat +{ + /// + /// 聊天室控制器 + /// + [Route("business/[controller]")] + public class ChatController : BaseController + { + + private readonly ILogger _logger; + private readonly IHubContext _hubContext; + + public ChatController(IHubContext hubContext, ILogger logger) + { + _hubContext = hubContext; + _logger = logger; + } + + + //[HttpGet] + //public string Get() + //{ + // //var message = new NotificationModel { Gid = Guid.NewGuid() }; + // //var json = Newtonsoft.Json.JsonConvert.SerializeObject(message); + // ////_hubContext.Clients.All.SendAsync("NotificationCenter", json); + // //_hubContext.Clients.All.SendAsync("SendMessage", ); + // //return Convert.ToString(json); + //} + + + + /// + /// 获取聊天室列表 + /// + /// 查询参数 + /// + //[HttpGet("getCrawlList")] + //public IActionResult GetCrawlist([FromQuery] CrawlQueryDto parm) + //{ + // var res = _crawlService.GetBuxiuseList(parm); + // return SUCCESS(res); + //} + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatGPT/ChatGPTController.cs b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatGPT/ChatGPTController.cs new file mode 100644 index 0000000..1f75f5d --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatGPT/ChatGPTController.cs @@ -0,0 +1,84 @@ +using ARW.Model.Chat; +using ARW.Model.Chat.ChatGPT; +using ARW.Service.Business.IBusinessService.Chat; +using Infrastructure; +using Microsoft.AspNetCore.Mvc; +using OpenAI_API; +using OpenAI_API.Completions; + +namespace ARW.Admin.WebApi.Controllers.Business.Api.ChatGPT +{ + /// + /// ChatGPT控制器 + /// + [Route("api/[controller]")] + public class ChatGPTController : BaseController + { + private readonly IChatGPTLogService _ChatGPTLogService; + + public ChatGPTController(IChatGPTLogService chatGPTLogService) + { + _ChatGPTLogService = chatGPTLogService; + } + + /// + /// 获取与ChatGPT的聊天记录 + /// + [HttpGet("getChatGPTLog")] + public async Task GetChatGPTLog([FromQuery] ChatGPTQueryDto parm) + { + if (parm.UserGuId == 0) throw new CustomException("请传用户的Guid"); + var list = await _ChatGPTLogService.GetChatGPTLogList(parm); + + return SUCCESS(list); + } + + /// + /// 请求ChatGPT接口 + /// + [HttpPost("getChatGPT")] + public IActionResult GetChatGPT([FromBody] CahtGPTDto parm) + { + return SUCCESS("你好!我是一个语言模型。"); + + //你的apiKey + string apiKey = "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"; + //string apiKey = "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"; + string answer = string.Empty; + var openai = new OpenAIAPI(apiKey); + CompletionRequest completion = new CompletionRequest(); + completion.Prompt = parm.Content; + completion.Model = OpenAI_API.Models.Model.DavinciText; + completion.MaxTokens = 4000; + var result = openai.Completions.CreateCompletionAsync(completion); + if (result != null) + { + foreach (var item in result.Result.Completions) + { + answer = item.Text; + } + return SUCCESS(answer); + } + else + { + return SUCCESS("Not found"); + } + + return SUCCESS("已读"); + } + + + /// + /// 添加聊天记录 + /// + [HttpPost("addChatGPTLog")] + public IActionResult addChatGPTLog([FromBody] CahtGPTDto parm) + { + var id = _ChatGPTLogService.AddChatGPTLog(parm); + if (id == 0) throw new CustomException("添加记录失败"); + + return SUCCESS("添加记录成功"); + } + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatLogController.cs b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatLogController.cs new file mode 100644 index 0000000..9b6ee31 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatLogController.cs @@ -0,0 +1,123 @@ +using Aliyun.OSS; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Model.Chat; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Model.Models.Business.Chat; +using ARW.Service.Business.IBusinessService; +using ARW.Service.Business.IBusinessService.Chat; +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace ARW.Admin.WebApi.Controllers.Business.Api.Chat +{ + /// + /// 聊天记录Api + /// + [Route("business/[controller]")] + public class ChatLogController : BaseController + { + private readonly IChatLogService _ChatLogService; + + public ChatLogController(IChatLogService chatLogService) + { + _ChatLogService = chatLogService; + } + + /// + /// 获取最近聊天列表 + /// + [HttpPost("chatLogList")] + public IActionResult ChatLogList([FromBody] ChatLogQueryDto parm) + { + var res = _ChatLogService.GetChatLogList(parm); + return SUCCESS(res); + } + + /// + /// 好友聊天记录列表 + /// + [HttpPost("chatFriendLogList")] + public IActionResult GetChatFriendLogList([FromBody] ChatLogQueryDto parm) + { + var res = _ChatLogService.GetChatFriendLogList(parm); + return SUCCESS(res); + } + + /// + /// 群聊聊天列表 + /// + [HttpPost("chatGroupLogList")] + public IActionResult ChatGroupLogList([FromBody] ChatLogQueryDto parm) + { + var res = _ChatLogService.GetChatGroupLogList(parm); + return SUCCESS(res); + } + + /// + /// 好友聊天历史记录列表 + /// + [HttpPost("chatFriendLogHistoryList")] + public IActionResult GetChatFriendHistoryLogList([FromBody] ChatLogQueryDto parm) + { + var res = _ChatLogService.GetChatFriendHistoryLogList(parm); + return SUCCESS(res); + } + + /// + /// 群聊聊天历史列表 + /// + [HttpPost("chatGroupLogHistoryList")] + public IActionResult ChatGroupLogHistoryList([FromBody] ChatLogQueryDto parm) + { + var res = _ChatLogService.GetChatGroupLogHistoryList(parm); + return SUCCESS(res); + } + + /// + /// 获取自己发的消息(最新) + /// + [HttpPost("slefNewMsg")] + public IActionResult SelfNewMsg([FromBody] ChatLogQueryDto parm) + { + var res = _ChatLogService.SelfNewMsg(parm); + return SUCCESS(res); + } + + /// + /// 添加好友聊天记录 + /// + [HttpPost("addChatFriendLog")] + public IActionResult AddChatFriendLog([FromBody] ChatLogDto parm) + { + var res = _ChatLogService.AddChatFriendLog(parm); + return SUCCESS("发送成功!"); + } + + /// + ///已读处理 + /// + [HttpPost("read")] + public IActionResult Read([FromBody] ChatLogQueryDto parm) + { + _ChatLogService.Read(parm); + return SUCCESS("已读"); + } + + /// + /// 群聊已读处理 + /// + [HttpPost("groupRead")] + public IActionResult GroupRead([FromBody] ChatLogQueryDto parm) + { + _ChatLogService.GroupRead(parm); + return SUCCESS("已读"); + } + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatLoginController.cs b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatLoginController.cs new file mode 100644 index 0000000..a614e8a --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/ChatLoginController.cs @@ -0,0 +1,133 @@ +using ARW.Admin.WebApi.Extensions; +using ARW.Model.Chat; +using ARW.Model.Models.Business.Chat; +using ARW.Service.Business.IBusinessService.Chat; +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace ARW.Admin.WebApi.Controllers.Business.Api.Chat +{ + /// + /// 登录 + /// + [Route("business/[controller]")] + public class ChatLoginController : BaseController + { + //static readonly NLog.Logger logger = NLog.LogManager.GetLogger("ChatLoginController"); + private readonly IChatLoginService chatLoginService; + + public ChatLoginController( + IChatLoginService chatLoginService) + { + this.chatLoginService = chatLoginService; + } + + private ChatUser Current_user; + + + /// + /// 登录 + /// + /// 登录对象 + /// + [Route("login")] + [HttpPost] + //[Log(Title = "登录")] + public IActionResult Login([FromBody] ChatUserDto loginBody) + { + if (loginBody == null) { throw new CustomException("请求参数错误"); } + + var user = chatLoginService.Login(loginBody); + + return SUCCESS("登录成功!"); + } + + /// + /// 更新用户信息 + /// + /// + [HttpPut("updateChatUser")] + [Log(Title = "聊天用户修改", BusinessType = BusinessType.UPDATE)] + public IActionResult UpdateChatUser([FromBody] ChatUserDto parm) + { + if (parm == null) + { + throw new CustomException("请求参数错误"); + } + + var modal = parm.Adapt().ToUpdate(HttpContext); + + var data = chatLoginService.GetFirst(it => it.ChatUserId == modal.ChatUserId); + if (data == null) + { + throw new CustomException("用户不存在"); + } + + + var response = chatLoginService.Update(it => it.ChatUserId == modal.ChatUserId, + f => new ChatUser + { + ChatUserNickName = modal.ChatUserNickName, + Sex = modal.Sex, + Age = modal.Age, + ChatUserImg = modal.ChatUserImg, + Phone = modal.Phone, + Email = modal.Email, + }); + + return SUCCESS(response); + } + + + /// + /// 获取用户信息 + /// + /// + [HttpPost("getInfo")] + public IActionResult GetUserInfo([FromBody] ChatUserDto dto) + { + if (dto.ChatUserName== null) { throw new CustomException("请求参数错误"); } + var user = chatLoginService.FindUserByName(dto.ChatUserName); + + return SUCCESS(user); + } + + /// + /// 查看好友登录状态 + /// + [HttpGet("checkFriendStatus")] + public IActionResult CheckFriendStatus([FromQuery] ChatUserDto parm) + { + var res = chatLoginService.GetFirst(s => s.ChatUserGuId == parm.ChatUserGuid && s.Status == 1); + + if (res == null) { return SUCCESS("空"); } + return SUCCESS(res); + } + + + /// + /// 注册 + /// + /// + /// + [HttpPost("register")] + [AllowAnonymous] + [Log(Title = "注册", BusinessType = Infrastructure.Enums.BusinessType.INSERT)] + public IActionResult Register([FromBody] ChatUserDto dto) + { + if (dto == null) { throw new CustomException("请求参数错误"); } + + var user = chatLoginService.Register(dto); + if (user == null) + { + throw new CustomException("注册失败"); + } + + return SUCCESS(user, "注册成功!"); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/FriendsController.cs b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/FriendsController.cs new file mode 100644 index 0000000..9d171de --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/FriendsController.cs @@ -0,0 +1,164 @@ +using Aliyun.OSS; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Model.Chat; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Model.Models.Business.Chat; +using ARW.Service.Business.IBusinessService; +using ARW.Service.Business.IBusinessService.Chat; +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace ARW.Admin.WebApi.Controllers.Business.Api.Chat +{ + /// + /// 好友 + /// + [Route("business/[controller]")] + public class FriendsController : BaseController + { + private readonly IChatLoginService _ChatLoginService; + private readonly IFriendsService _FriendsService; + private readonly IGroupService _GroupService; + private readonly IApplyService _ApplyService; + + public FriendsController( + IFriendsService friendsService, IChatLoginService ChatLoginService, IApplyService applyService, IGroupService groupService) + { + _FriendsService = friendsService; + _ChatLoginService = ChatLoginService; + _ApplyService = applyService; + _GroupService = groupService; + } + + /// + /// 好友列表 + /// + [HttpGet("friendsList")] + public IActionResult GetFriendsList([FromQuery] FriendsQueryDto parm) + { + var res = _FriendsService.GetFriendsList(parm); + return SUCCESS(res); + } + + /// + /// 查找好友 + /// + /// + [HttpPost("findFriends")] + public IActionResult FindFriends([FromBody] FindFriendsDto dto) + { + if (dto.FriendName == null) { throw new CustomException("请求参数错误"); } + var user = _ChatLoginService.GetFirst(s => s.ChatUserName == dto.FriendName); + var group = _GroupService.GetFirst(s => s.GroupName == dto.FriendName); + + if(user == null && group == null) + { + { throw new CustomException("用户或群聊不存在"); } + } + + if(user == null && group != null) + { + return SUCCESS(group); + } + else + { + return SUCCESS(user); + } + + } + + /// + /// 修改好友备注 + /// + /// + [HttpPut("updateNote")] + [Log(Title = "修改好友备注", BusinessType = BusinessType.UPDATE)] + public IActionResult UpdateStudent([FromBody] FriendsDto parm) + { + if (parm == null) { throw new CustomException("请求参数错误"); } + + var modal = parm.Adapt().ToUpdate(HttpContext); + + var data = _FriendsService.GetFirst(it => it.UserGuId == modal.UserGuId && it.FriendsGuId == modal.FriendsGuId); + if (data == null) + { + throw new CustomException("好友不存在"); + } + + + var response = _FriendsService.Update(it => it.UserGuId == modal.UserGuId && it.FriendsGuId == modal.FriendsGuId, + f => new Friends + { + FriendsNote = modal.FriendsNote + } + ); + + return SUCCESS(response); + } + + + /// + /// 添加好友 + /// + /// + /// + /// + [HttpPost("addFriend")] + public async Task AddFriend([FromBody] FriendsDto dto) + { + if (dto == null) { throw new CustomException("请求参数错误"); } + + var modal = dto.Adapt().ToCreate(HttpContext); + var parm = new Apply + { + SenderGuId = modal.FriendsGuId, + ReceiverGuId = modal.UserGuId, + Reply = dto.Reply, + IsAgree = dto.IsAgree + }; + + var applyDto = parm.ToUpdate(HttpContext); + + + if (dto.IsAgree == true) + { + var res = _ApplyService.Update(it => it.ReceiverGuId == applyDto.ReceiverGuId && it.SenderGuId == applyDto.SenderGuId && it.IsGroupApply == null, + f => new Apply + { + IsAgree = true, + Update_time = DateTime.Now + }); + + + var Fdto = new Friends + { + UserGuId = modal.FriendsGuId, + FriendsGuId = modal.UserGuId, + FriendsNote = null + }; + await _FriendsService.InsertAsync(modal); + await _FriendsService.InsertAsync(Fdto); + + } + else + { + var res = _ApplyService.Update(it => it.ReceiverGuId == applyDto.ReceiverGuId && it.SenderGuId == applyDto.SenderGuId&& it.IsGroupApply == false, + f => new Apply + { + IsAgree = false, + Reply = applyDto.Reply + }); + } + + return SUCCESS("添加成功!"); + } + + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/GroupController.cs b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/GroupController.cs new file mode 100644 index 0000000..30cefc1 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/GroupController.cs @@ -0,0 +1,78 @@ +using Aliyun.OSS; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Model.Chat; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Model.Models.Business.Chat; +using ARW.Service.Business.IBusinessService; +using ARW.Service.Business.IBusinessService.Chat; +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace ARW.Admin.WebApi.Controllers.Business.Api.Chat +{ + /// + /// 群聊控制器 + /// + [Route("business/[controller]")] + public class GroupController : BaseController + { + private readonly IChatLoginService _ChatLoginService; + private readonly IGroupService _GroupService; + private readonly IGroupUserService _GroupUesrService; + private readonly IFriendsService _FriendsService; + private readonly IApplyService _ApplyService; + + public GroupController( + IFriendsService friendsService, IChatLoginService ChatLoginService, IApplyService applyService, IGroupService groupService, IGroupUserService groupUesrService) + { + _FriendsService = friendsService; + _ChatLoginService = ChatLoginService; + _ApplyService = applyService; + _GroupService = groupService; + _GroupUesrService = groupUesrService; + } + + /// + /// 群聊列表 + /// + [HttpGet("groupList")] + public IActionResult GetGroupList([FromQuery] GroupQueryDto parm) + { + var res = _GroupService.GetGroupList(parm); + return SUCCESS(res); + } + + /// + /// 创建群聊 + /// + /// + /// + /// + [HttpPost("createGroup")] + public IActionResult CreateGroup([FromBody] GroupDto dto) + { + if (dto == null) { throw new CustomException("请求参数错误"); } + + var modal = dto.Adapt().ToCreate(HttpContext); + var response = _GroupService.Insertable(modal).ExecuteReturnSnowflakeId(); + + var groupUserDto = new GroupUser + { + GroupGuId = response, + UserGuId = dto.UserGuId, + IsGroupManager = true + }; + + var ress = _GroupUesrService.Insertable(groupUserDto).ExecuteCommandAsync(); + + return SUCCESS("创建成功!"); + } + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/GroupUserController.cs b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/GroupUserController.cs new file mode 100644 index 0000000..4e268f9 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/Api/Chat/GroupUserController.cs @@ -0,0 +1,95 @@ +using Aliyun.OSS; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Model.Chat; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Model.Models.Business.Chat; +using ARW.Service.Business.IBusinessService; +using ARW.Service.Business.IBusinessService.Chat; +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace ARW.Admin.WebApi.Controllers.Business.Api.Chat +{ + /// + /// 群聊用户 + /// + [Route("business/[controller]")] + public class GroupUserController : BaseController + { + private readonly IChatLoginService _ChatLoginService; + private readonly IFriendsService _FriendsService; + private readonly IApplyService _ApplyService; + private readonly IGroupUserService _GroupUserService; + + public GroupUserController( + IFriendsService friendsService, IChatLoginService ChatLoginService, IApplyService applyService, IGroupUserService groupUserService) + { + _FriendsService = friendsService; + _ChatLoginService = ChatLoginService; + _ApplyService = applyService; + _GroupUserService = groupUserService; + } + + /// + /// 添加群聊 + /// + /// + /// + /// + [HttpPost("addGroup")] + public IActionResult AddGroup([FromBody] GroupUserDto dto) + { + if (dto == null) { throw new CustomException("请求参数错误"); } + + var parm = new Apply + { + SenderGuId = dto.UserGuId, + ReceiverGuId = dto.GroupManagerGuId, + Reply = dto.Reply, + IsAgree = dto.IsAgree + }; + + var applyDto = parm.ToUpdate(HttpContext); + + + if (dto.IsAgree == true) + { + var res = _ApplyService.Update(it => it.ReceiverGuId == applyDto.ReceiverGuId && it.SenderGuId == applyDto.SenderGuId && it.IsGroupApply == true, + f => new Apply + { + IsAgree = true, + Update_time = DateTime.Now + }); + + var gourpGuid = _GroupUserService.GetFirst(s => s.UserGuId == dto.GroupManagerGuId && s.IsGroupManager == true).GroupGuId; + + var Gdto = new GroupUser + { + GroupGuId = gourpGuid, + UserGuId = dto.UserGuId, + }; + var ress = _GroupUserService.Insertable(Gdto).ExecuteCommandAsync(); + + } + else + { + var res = _ApplyService.Update(it => it.ReceiverGuId == applyDto.ReceiverGuId && it.SenderGuId == applyDto.SenderGuId && it.IsGroupApply == false, + f => new Apply + { + IsAgree = false, + Reply = applyDto.Reply + });; + } + + return SUCCESS("添加成功!"); + } + + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/ChatUser/ClhatUserController.cs b/ARW-net/ARW.WebApi/Controllers/Business/ChatUser/ClhatUserController.cs new file mode 100644 index 0000000..6379a31 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/ChatUser/ClhatUserController.cs @@ -0,0 +1,83 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Service.Business.IBusinessService; +using ARW.Service.Business.IBusinessService.Chat; +using ARW.Model.Chat; +using ARW.Model.Models.Business.Chat; +using Infrastructure.Extensions; + +namespace ARW.Admin.WebApi.Controllers.Business.ChatUsers +{ + /// + /// 班级控制器 + /// + [Verify] + [Route("business/[controller]")] + public class ChatUserController : BaseController + { + private readonly IChatLoginService _ChatLoginService; + + public ChatUserController(IChatLoginService classService) + { + this._ChatLoginService = classService; + } + + /// + /// 获取聊天用户列表 + /// + /// 查询参数 + /// + [HttpGet("getChatUserList")] + [ActionPermissionFilter(Permission = "business:chatUser:list")] + public IActionResult GetChatUserList([FromQuery] ChatUserQueryDto parm) + { + var res = _ChatLoginService.GetChatUserList(parm); + //res.Result = res.Result.Select(a => new ChatUser{ ChatUserGuid = a.ChatUserGuid,Name = a.Name}).ToList(); + return SUCCESS(res); + } + + /// + /// 修改登录状态 + /// + /// + [HttpPut("updateChatUserStatus")] + [ActionPermissionFilter(Permission = "business:cahtUser:updateStatus")] + [Log(Title = "聊天室用户修改登录状态", BusinessType = BusinessType.UPDATE)] + public IActionResult Update([FromBody] ChatUserDto parm) + { + if (parm == null) + { + throw new CustomException("请求参数错误"); + } + + var modal = parm.Adapt().ToUpdate(HttpContext); + + + var id = modal.ChatUserId.ParseToLong(); + + var response = _ChatLoginService.Update(it => it.ChatUserId == id, + f => new ChatUser + { + Status = modal.Status, + }); + + if(response != 1) + { + throw new CustomException("修改失败"); + } + + return SUCCESS("修改成功"); + } + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/ClassController.cs b/ARW-net/ARW.WebApi/Controllers/Business/ClassController.cs new file mode 100644 index 0000000..f708843 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/ClassController.cs @@ -0,0 +1,109 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Service.Business.IBusinessService; + +namespace ARW.Admin.WebApi.Controllers.Business +{ + /// + /// 班级控制器 + /// + [Verify] + [Route("business/[controller]")] + public class ClassController : BaseController + { + private readonly IClassService _classService; + + public ClassController(IClassService classService) + { + this._classService = classService; + } + + /// + /// 获取班级列表 + /// + /// 查询参数 + /// + [HttpGet("getClassList")] + [ActionPermissionFilter(Permission = "business:class:list")] + public IActionResult GetClassARWst([FromQuery] ClassQueryDto parm) + { + var res = _classService.GetClassList(parm); + //res.Result = res.Result.Select(a => new Class{ ClassGuid = a.ClassGuid,Name = a.Name}).ToList(); + return SUCCESS(res); + } + + /// + /// 添加班级 + /// + /// + [HttpPost("addClass")] + [ActionPermissionFilter(Permission = "business:class:add")] + [Log(Title = "班级添加", BusinessType = BusinessType.INSERT)] + public IActionResult Create([FromBody] ClassDto parm) + { + if (parm == null) + { + throw new CustomException("请求参数错误"); + } + + var modal = parm.Adapt().ToCreate(HttpContext); + + var response = _classService.Insertable(modal).ExecuteReturnSnowflakeId(); + return SUCCESS(response); + } + + /// + /// 更新班级 + /// + /// + [HttpPut("updateClass")] + [ActionPermissionFilter(Permission = "business:class:update")] + [Log(Title = "班级修改", BusinessType = BusinessType.UPDATE)] + public IActionResult Update([FromBody] ClassDto parm) + { + if (parm == null) + { + throw new CustomException("请求参数错误"); + } + + var modal = parm.Adapt().ToUpdate(HttpContext); + + var response = _classService.Update(it => it.ClassId == modal.ClassId, + f => new Class + { + ClassName = parm.ClassName, + }); + + return SUCCESS(response); + } + + /// + /// 删除文章 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "business:class:delete")] + [Log(Title = "班级删除", BusinessType = BusinessType.DELETE)] + public IActionResult Delete(string ids) + { + long[] idsArr = Tools.SpitLongArrary(ids); + + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + + var response = _classService.Delete(idsArr); + + return ToResponse(response, "删除成功!"); + } + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/ProductTypeController.cs b/ARW-net/ARW.WebApi/Controllers/Business/ProductTypeController.cs new file mode 100644 index 0000000..69b70dc --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/ProductTypeController.cs @@ -0,0 +1,113 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.Dto.Business.Product; +using ARW.Model.Models.Business.Product; +using ARW.Service.Business.IBusinessService; + +namespace ARW.Admin.WebApi.Controllers.Business +{ + /// + /// 产品管理Controller + /// + [Verify] + [Route("business/[controller]")] + public class ProductTypeController : BaseController + { + + private readonly IProductTypeService _ProductTypeService; + + /// + /// 依赖注入 + /// + /// 产品类型服务 + public ProductTypeController(IProductTypeService productTypeService) + { + _ProductTypeService = productTypeService; + } + + /// + /// 查询产品类型列表树 + /// + /// + /// + [HttpGet("getProductTypeTreeList")] + [ActionPermissionFilter(Permission = "business:productType:treeList")] + public IActionResult ProductTreeList([FromQuery] ProductTypeQueryDto parm) + { + var response = _ProductTypeService.GetTreeList(parm); + return SUCCESS(response); + } + + /// + /// 添加产品类型 + /// + /// + [HttpPost("addProductType")] + [ActionPermissionFilter(Permission = "business:productType:add")] + [Log(Title = "产品类型", BusinessType = BusinessType.INSERT)] + public IActionResult addProductType([FromBody] ProductTypeDto parm) + { + if (parm == null) + { + throw new CustomException("请求参数错误"); + } + //从 Dto 映射到 实体 + var modal = parm.Adapt().ToCreate(HttpContext); + + var response = _ProductTypeService.Insertable(modal).ExecuteReturnSnowflakeId(); + + return ToResponse(response); + } + + /// + /// 更新产品类型 + /// + /// + [HttpPut("updateProductType")] + [ActionPermissionFilter(Permission = "business:productType:edit")] + [Log(Title = "产品类型", BusinessType = BusinessType.UPDATE)] + public IActionResult updateProductType([FromBody] ProductTypeDto parm) + { + if (parm == null) + { + throw new CustomException("请求实体不能为空"); + } + var modal = parm.Adapt().ToUpdate(HttpContext); + + var response = _ProductTypeService.Update(it => it.ProductTypeId == modal.ProductTypeId, + f => new ProductType + { + ProductTypeName = parm.ProductTypeName, + ParentId = parm.ParentId, + }); + + return ToResponse(response); + } + + /// + /// 删除产品类型 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "business:productType:delete")] + [Log(Title = "产品类型", BusinessType = BusinessType.DELETE)] + public IActionResult deleteProductType(string ids) + { + long[] idsArr = Tools.SpitLongArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + + var response = _ProductTypeService.Delete(idsArr); + + return ToResponse(response); + } + + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/Business/StudentController.cs b/ARW-net/ARW.WebApi/Controllers/Business/StudentController.cs new file mode 100644 index 0000000..bc744d2 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/Business/StudentController.cs @@ -0,0 +1,204 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.Dto.Business; +using ARW.Model.Models.Business; +using ARW.Model.Vo; +using ARW.Service.Business.IBusinessService; + +namespace ARW.Admin.WebApi.Controllers.Business +{ + /// + /// 学生控制器 + /// + [Verify] + [Route("business/[controller]")] + public class StudentController : BaseController + { + private readonly IStudentService _studentService; + private readonly IClassService _classService; + + /// + /// 依赖注入 + /// + /// 学生服务 + /// 班级服务 + public StudentController(IStudentService studentService, IClassService classService) + { + _studentService = studentService; + _classService = classService; + } + + /// + /// 获取学生列表 + /// + /// 查询参数 + [HttpGet("getStudentList")] + [ActionPermissionFilter(Permission = "business:student:list")] + public IActionResult GetStudentARWst([FromQuery] StudentQueryDto parm) + { + var res = _studentService.GetStudentList(parm); + //res.Result = res.Result.Select(a => new Student{ StudentGuid = a.StudentGuid,Name = a.Name}).ToList(); + return SUCCESS(res); + } + + /// + /// 添加学生 + /// + /// + [HttpPost("addStudent")] + [ActionPermissionFilter(Permission = "business:student:add")] + [Log(Title = "学生添加", BusinessType = BusinessType.INSERT)] + public IActionResult AddStudent([FromBody] StudentDto parm) + { + if (parm == null) + { + throw new CustomException("请求参数错误"); + } + + var modal = parm.Adapt().ToCreate(HttpContext); + + var response = _studentService.Insertable(modal).ExecuteReturnSnowflakeId(); + return SUCCESS("添加成功!"); + } + + /// + /// 更新学生 + /// + /// + [HttpPut("updateStudent")] + [ActionPermissionFilter(Permission = "business:student:update")] + [Log(Title = "学生修改", BusinessType = BusinessType.UPDATE)] + public IActionResult UpdateStudent([FromBody] StudentDto parm) + { + if (parm == null) + { + throw new CustomException("请求参数错误"); + } + + var modal = parm.Adapt().ToUpdate(HttpContext); + + var data = _studentService.GetFirst(it => it.StudentId == modal.StudentId); + if(data == null) + { + throw new CustomException("学生不存在"); + } + + + var response = _studentService.Update(it => it.StudentId == modal.StudentId, + f => new Student + { + ClassId = modal.ClassId, + DictType = modal.DictType, + StudentName = modal.StudentName, + Sex = modal.Sex, + Age = modal.Age, + StudentTag = modal.StudentTag, + StudentImg = modal.StudentImg, + StudentService = modal.StudentService, + StudentDescribe = modal.StudentDescribe, + }); + + return SUCCESS(response); + } + + /// + /// 删除文章 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "business:student:delete")] + [Log(Title = "学生删除", BusinessType = BusinessType.DELETE)] + public IActionResult DeleteStudent(string ids) + { + long[] idsArr = Tools.SpitLongArrary(ids); + + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + + var response = _studentService.Delete(idsArr); + + return ToResponse(response,"删除成功!"); + } + + /// + /// 获取班级列表(下拉框) + /// + /// + [HttpGet("getClassList")] + [ActionPermissionFilter(Permission = "business:student:classlist")] + public IActionResult getClassList() + { + var res = _classService.GetAll(); + //res.Result = res.Result.Select(a => new Student{ StudentGuid = a.StudentGuid,Name = a.Name}).ToList(); + return SUCCESS(res); + } + + + /// + /// 导出学生 + /// + /// 使用IFromFile必须使用name属性否则获取不到文件 + /// + [HttpPost("importData")] + [Log(Title = "学生导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = false)] + [ActionPermissionFilter(Permission = "business:student:import")] + public IActionResult ImportExcel ([FromForm(Name = "file")] IFormFile formFile) + { + IEnumerable parm = ExcelHelper.ImportData(formFile.OpenReadStream()); + + var student = new StudentDto(); + foreach (StudentDto item in parm) + { + student = item; + } + + var modal = student.Adapt().ToCreate(HttpContext); + var response = _studentService.Insertable(modal).ExecuteReturnSnowflakeId(); + + //TODO 业务逻辑,自行插入数据到db + return SUCCESS(response); + } + + /// + /// 学生导入模板下载 + /// + /// + [HttpGet("importTemplate")] + [Log(Title = "学生模板", BusinessType = BusinessType.EXPORT, IsSaveRequestData = false, IsSaveResponseData = false)] + [AllowAnonymous] + public IActionResult ImportTemplateExcel() + { + List student = new List(); + MemoryStream stream = new MemoryStream(); + + string sFileName = DownloadImportTemplate(student, stream, "学生列表"); + return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"{sFileName}"); + } + + + /// + /// 导出学生 + /// + /// + [Log(Title = "学生导出", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] + [HttpGet("export")] + [ActionPermissionFilter(Permission = "business:student:export")] + public IActionResult ExportExcel ([FromQuery] StudentQueryDto parm) + { + parm.PageSize = 10000; + var list = _studentService.GetStudentList(parm).Result; + + string sFileName = ExportExcel(list, "Student", "学生列表"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/CommonController.cs b/ARW-net/ARW.WebApi/Controllers/CommonController.cs new file mode 100644 index 0000000..88923c4 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/CommonController.cs @@ -0,0 +1,194 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Extensions; +using Infrastructure.Model; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using Newtonsoft.Json; +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.System; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers +{ + /// + /// 公共模块 + /// + [Route("[controller]/[action]")] + public class CommonController : BaseController + { + private OptionsSetting OptionsSetting; + private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + + private IWebHostEnvironment WebHostEnvironment; + private ISysFileService SysFileService; + public CommonController(IOptions options, IWebHostEnvironment webHostEnvironment, ISysFileService fileService) + { + WebHostEnvironment = webHostEnvironment; + SysFileService = fileService; + OptionsSetting = options.Value; + } + + /// + /// hello + /// + /// + [Route("/")] + [HttpGet] + public IActionResult Index() + { + return Content("Hello看到这里页面说明你已经成功启动了本项目,加油吧 少年。"); + } + + /// + /// 发送邮件 + /// + /// 请求参数接收实体 + /// + [ActionPermissionFilter(Permission = "tool:email:send")] + [Log(Title = "发送邮件", IsSaveRequestData = false)] + [HttpPost] + public IActionResult SendEmail([FromBody] SendEmailDto sendEmailVo) + { + if (sendEmailVo == null || string.IsNullOrEmpty(sendEmailVo.Subject) || string.IsNullOrEmpty(sendEmailVo.ToUser)) + { + return ToResponse(ApiResult.Error($"请求参数不完整")); + } + if (string.IsNullOrEmpty(OptionsSetting.MailOptions.From) || string.IsNullOrEmpty(OptionsSetting.MailOptions.Password)) + { + return ToResponse(ApiResult.Error($"请配置邮箱信息")); + } + + MailHelper mailHelper = new(); + + string[] toUsers = sendEmailVo.ToUser.Split(",", StringSplitOptions.RemoveEmptyEntries); + if (sendEmailVo.SendMe) + { + toUsers.Append(mailHelper.FromEmail); + } + mailHelper.SendMail(toUsers, sendEmailVo.Subject, sendEmailVo.Content, sendEmailVo.FileUrl, sendEmailVo.HtmlContent); + + logger.Info($"发送邮件{JsonConvert.SerializeObject(sendEmailVo)}"); + + return SUCCESS(true); + } + + #region 上传 + + /// + /// 存储文件 + /// + /// + /// 存储目录 + /// 自定义文件名 + /// 上传类型1、保存到本地 2、保存到阿里云 + /// + [HttpPost()] + //[Verify] + [ActionPermissionFilter(Permission = "common")] + public async Task UploadFile([FromForm(Name = "file")] IFormFile formFile, string? fileName = "", string? fileDir = "", StoreType storeType = StoreType.LOCAL) + { + if (formFile == null) throw new CustomException(ResultCode.PARAM_ERROR, "上传文件不能为空"); + SysFile file = new(); + string fileExt = Path.GetExtension(formFile.FileName);//文件后缀 + double fileSize = Math.Round(formFile.Length / 1024.0, 2);//文件大小KB + string[] NotAllowedFileExtensions = new string[] { ".bat", ".exe", ".jar", ".js" }; + int MaxContentLength = 15; + if (NotAllowedFileExtensions.Contains(fileExt)) + { + return ToResponse(ResultCode.CUSTOM_ERROR, "上传失败,未经允许上传类型"); + } + switch (storeType) + { + case StoreType.LOCAL: + string savePath = Path.Combine(WebHostEnvironment.WebRootPath); + if (fileDir.IsEmpty()) + { + fileDir = AppSettings.App(new string[] { "Upload", "localSavePath" }); + } + file = await SysFileService.SaveFileToLocal(savePath, fileName, fileDir, HttpContext.GetName(), formFile); + break; + case StoreType.REMOTE: + break; + case StoreType.AARWYUN: + if ((fileSize / 1024) > MaxContentLength) + { + return ToResponse(ResultCode.CUSTOM_ERROR, "上传文件过大,不能超过 " + MaxContentLength + " MB"); + } + file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", fileDir, HttpContext.GetName()) + { + StoreType = (int)StoreType.AARWYUN, + FileType = formFile.ContentType + }; + file = await SysFileService.SaveFileToAliyun(file, formFile); + + if (file.Id <= 0) { return ToResponse(ApiResult.Error("阿里云连接失败")); } + break; + case StoreType.TENCENT: + break; + case StoreType.QINIU: + break; + default: + break; + } + return SUCCESS(new + { + url = file.AccessUrl, + fileName = file.FileName, + fileId = file.Id.ToString() + }); + } + + /// + /// 存储文件到阿里云(已弃用) + /// + /// + /// 自定义文件名 + /// 上传文件夹路径 + /// + [HttpPost] + [Verify] + [ActionPermissionFilter(Permission = "common")] + public async Task UploadFileAliyun([FromForm(Name = "file")] IFormFile formFile, string fileName = "", string fileDir = "") + { + if (formFile == null) throw new CustomException(ResultCode.PARAM_ERROR, "上传文件不能为空"); + string fileExt = Path.GetExtension(formFile.FileName);//文件后缀 + double fileSize = Math.Round(formFile.Length / 1024.0, 2);//文件大小KB + string[] NotAllowedFileExtensions = new string[] { ".bat", ".exe", ".jar", ".js" }; + int MaxContentLength = 15; + if (NotAllowedFileExtensions.Contains(fileExt)) + { + return ToResponse(ResultCode.CUSTOM_ERROR, "上传失败,未经允许上传类型"); + } + if ((fileSize / 1024) > MaxContentLength) + { + return ToResponse(ResultCode.CUSTOM_ERROR, "上传文件过大,不能超过 " + MaxContentLength + " MB"); + } + SysFile file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", fileDir, HttpContext.GetName()) + { + StoreType = (int)StoreType.AARWYUN, + FileType = formFile.ContentType + }; + file = await SysFileService.SaveFileToAliyun(file, formFile); + + if (file.Id <= 0) { return ToResponse(ApiResult.Error("阿里云连接失败")); } + + return SUCCESS(new + { + url = file.AccessUrl, + fileName = file.FileName, + fileId = file.Id.ToString() + }); + } + #endregion + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/CodeGeneratorController.cs b/ARW-net/ARW.WebApi/Controllers/System/CodeGeneratorController.cs new file mode 100644 index 0000000..3999adf --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/CodeGeneratorController.cs @@ -0,0 +1,314 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Extensions; +using Mapster; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.IO; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.CodeGenerator; +using ARW.CodeGenerator.Model; +using ARW.CodeGenerator.Service; +using ARW.Common; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System.Generate; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers +{ + /// + /// 代码生成 + /// + [Verify] + [Route("tool/gen")] + public class CodeGeneratorController : BaseController + { + private readonly CodeGeneraterService _CodeGeneraterService = new CodeGeneraterService(); + private readonly IGenTableService GenTableService; + private readonly IGenTableColumnService GenTableColumnService; + + private readonly IWebHostEnvironment WebHostEnvironment; + public CodeGeneratorController( + IGenTableService genTableService, + IGenTableColumnService genTableColumnService, + IWebHostEnvironment webHostEnvironment) + { + GenTableService = genTableService; + GenTableColumnService = genTableColumnService; + WebHostEnvironment = webHostEnvironment; + } + + /// + /// 获取所有数据库的信息 + /// + /// + [HttpGet("getDbList")] + [ActionPermissionFilter(Permission = "tool:gen:list")] + public IActionResult GetListDataBase() + { + var dbList = _CodeGeneraterService.GetAllDataBases(); + var defaultDb = dbList.Count > 0 ? dbList[0] : null; + return SUCCESS(new { dbList, defaultDb }); + } + + /// + ///获取所有表根据数据库名 + /// + /// 数据库名 + /// 表名 + /// 分页信息 + /// + [HttpGet("getTableList")] + [ActionPermissionFilter(Permission = "tool:gen:list")] + public IActionResult FindListTable(string dbName, string? tableName, PagerInfo pager) + { + List list = _CodeGeneraterService.GetAllTables(dbName, tableName, pager); + var page = new PagedInfo + { + TotalPage = pager.TotalPage, + TotalNum = pager.TotalNum, + PageSize = pager.PageSize, + PageIndex = pager.PageNum, + Result = list + }; + return SUCCESS(page); + } + + /// + /// 查询生成表数据 + /// + /// 表名 + /// 分页信息 + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "tool:gen:list")] + public IActionResult GetGenTable(string? tableName, PagerInfo pagerInfo) + { + //查询原表数据,部分字段映射到代码生成表字段 + var rows = GenTableService.GetGenTables(new GenTable() { TableName = tableName }, pagerInfo); + + return SUCCESS(rows); + } + + /// + /// 修改代码生成业务查询 + /// + /// genTable表id + /// + [HttpGet("{tableId}")] + [ActionPermissionFilter(Permission = "tool:gen:query")] + public IActionResult GetColumnList(long tableId) + { + var tableInfo = GenTableService.GetGenTableInfo(tableId); + var tables = GenTableService.GetGenTableAll(); + if (tableInfo != null) + { + tableInfo.Columns = GenTableColumnService.GenTableColumns(tableId); + } + return SUCCESS(new { info = tableInfo, tables }); + } + + /// + /// 根据表id查询表列 + /// + /// genTable表id + /// + [HttpGet("column/{tableId}")] + [ActionPermissionFilter(Permission = "tool:gen:query")] + public IActionResult GetTableColumnList(long tableId) + { + var tableColumns = GenTableColumnService.GenTableColumns(tableId); + + return SUCCESS(new { columns = tableColumns }); + } + /// + /// 删除代码生成 + /// + /// + /// + [Log(Title = "代码生成", BusinessType = BusinessType.DELETE)] + [HttpDelete("{tableIds}")] + [ActionPermissionFilter(Permission = "tool:gen:remove")] + public IActionResult Remove(string tableIds) + { + long[] tableId = Tools.SpitLongArrary(tableIds); + + int result = GenTableService.DeleteGenTableByIds(tableId); + return SUCCESS(result); + } + + /// + /// 导入表结构(保存) + /// + /// + /// + /// + [HttpPost("importTable")] + [Log(Title = "代码生成", BusinessType = BusinessType.IMPORT)] + [ActionPermissionFilter(Permission = "tool:gen:import")] + public IActionResult ImportTableSave(string tables, string dbName) + { + if (string.IsNullOrEmpty(tables)) + { + throw new CustomException("表不能为空"); + } + string[] tableNames = tables.Split(',', StringSplitOptions.RemoveEmptyEntries); + int result = 0; + foreach (var tableName in tableNames) + { + var tabInfo = _CodeGeneraterService.GetTableInfo(dbName, tableName); + if (tabInfo != null) + { + GenTable genTable = CodeGeneratorTool.InitTable(dbName, HttpContext.GetName(), tableName, tabInfo?.Description); + genTable.TableId = GenTableService.ImportGenTable(genTable); + + if (genTable.TableId > 0) + { + //保存列信息 + List dbColumnInfos = _CodeGeneraterService.GetColumnInfo(dbName, tableName); + List genTableColumns = CodeGeneratorTool.InitGenTableColumn(genTable, dbColumnInfos); + + GenTableColumnService.DeleteGenTableColumnByTableName(tableName); + GenTableColumnService.InsertGenTableColumn(genTableColumns); + genTable.Columns = genTableColumns; + result++; + } + } + } + + return ToResponse(result); + } + + /// + /// 修改保存代码生成业务 + /// + /// 请求参数实体 + /// + [HttpPut] + [Log(Title = "代码生成", BusinessType = BusinessType.GENCODE, IsSaveRequestData = false)] + [ActionPermissionFilter(Permission = "tool:gen:edit")] + public IActionResult EditSave([FromBody] GenTableDto genTableDto) + { + if (genTableDto == null) throw new CustomException("请求参数错误"); + if (genTableDto.BusinessName.Equals(genTableDto.ModuleName, StringComparison.OrdinalIgnoreCase)) + { + return ToResponse(ResultCode.CUSTOM_ERROR, "模块名不能和业务名一样"); + } + var genTable = genTableDto.Adapt().ToUpdate(HttpContext); + + //将前端额外参数转成字符串存入Options中 + genTable.Options = genTableDto.Params.Adapt(); + DbResult result = GenTableService.UseTran(() => + { + int rows = GenTableService.UpdateGenTable(genTable); + if (rows > 0) + { + GenTableColumnService.UpdateGenTableColumn(genTable.Columns); + } + }); + + return SUCCESS(result.IsSuccess); + } + + /// + /// 预览代码 + /// + /// + /// + /// + [HttpPost("preview/{tableId}")] + [ActionPermissionFilter(Permission = "tool:gen:preview")] + public IActionResult Preview(long tableId = 0, int VueVersion = 0) + { + GenerateDto dto = new(); + dto.TableId = tableId; + dto.VueVersion = VueVersion; + if (dto == null || dto.TableId <= 0) + { + throw new CustomException(ResultCode.CUSTOM_ERROR, "请求参数为空"); + } + var genTableInfo = GenTableService.GetGenTableInfo(dto.TableId); + genTableInfo.Columns = GenTableColumnService.GenTableColumns(dto.TableId); + + dto.DbType = AppSettings.GetAppConfig("gen:dbType", 0); + dto.GenTable = genTableInfo; + dto.IsPreview = true; + //生成代码 + CodeGeneratorTool.Generate(dto); + + return SUCCESS(dto.GenCodes); + } + + /// + /// 生成代码(下载方式) + /// + /// 数据传输对象 + /// + [HttpPost("genCode")] + [Log(Title = "代码生成", BusinessType = BusinessType.GENCODE)] + [ActionPermissionFilter(Permission = "tool:gen:code")] + public IActionResult CodeGenerate([FromBody] GenerateDto dto) + { + if (dto?.TableId <= 0) + { + throw new CustomException(ResultCode.CUSTOM_ERROR, "请求参数为空"); + } + var genTableInfo = GenTableService.GetGenTableInfo(dto.TableId); + genTableInfo.Columns = GenTableColumnService.GenTableColumns(dto.TableId); + + dto.DbType = AppSettings.GetAppConfig("gen:dbType", 0); + dto.GenTable = genTableInfo; + //自定义路径 + if (genTableInfo.GenType == "1") + { + string tempPath = WebHostEnvironment.ContentRootPath; + var parentPath = Directory.GetParent(tempPath)?.Parent?.FullName; + //代码生成文件夹路径 + dto.GenCodePath = genTableInfo.GenPath.IsEmpty() ? parentPath : genTableInfo.GenPath; + } + else + { + dto.ZipPath = Path.Combine(WebHostEnvironment.WebRootPath, "Generatecode"); + dto.GenCodePath = Path.Combine(dto.ZipPath, DateTime.Now.ToString("yyyyMMdd")); + } + //生成压缩包 + string zipReturnFileName = $"LiAdmin.NET-{genTableInfo.TableComment}-{DateTime.Now:MMddHHmmss}.zip"; + + //生成代码到指定文件夹 + CodeGeneratorTool.Generate(dto); + //下载文件 + FileHelper.ZipGenCode(dto.ZipPath, dto.GenCodePath, zipReturnFileName); + + return SUCCESS(new { path = "/Generatecode/" + zipReturnFileName, fileName = dto.ZipFileName }); + } + + /// + /// 同步数据库 + /// + /// + /// + /// + [ActionPermissionFilter(Permission = "tool:gen:edit")] + [Log(Title = "代码生成", BusinessType = BusinessType.UPDATE)] + [HttpGet("synchDb/{tableId}")] + public IActionResult SynchDb(string tableName, long tableId = 0) + { + if (string.IsNullOrEmpty(tableName) || tableId <= 0) throw new CustomException("参数错误"); + GenTable table = GenTableService.GetGenTableInfo(tableId); + if (table == null) { throw new CustomException("原表不存在"); } + + List dbColumnInfos = _CodeGeneraterService.GetColumnInfo(table.DbName, tableName); + List dbTableColumns = CodeGeneratorTool.InitGenTableColumn(table, dbColumnInfos); + + GenTableService.SynchDb(tableId, table, dbTableColumns); + return SUCCESS(true); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/CommonLangController.cs b/ARW-net/ARW.WebApi/Controllers/System/CommonLangController.cs new file mode 100644 index 0000000..8ec33ea --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/CommonLangController.cs @@ -0,0 +1,157 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Extensions; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model; +using ARW.Model.Dto; +using ARW.Model.Models; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers +{ + /// + /// 多语言配置Controller + /// + [Verify] + [Route("system/CommonLang")] + public class CommonLangController : BaseController + { + /// + /// 多语言配置接口 + /// + private readonly ICommonLangService _CommonLangService; + + public CommonLangController(ICommonLangService CommonLangService) + { + _CommonLangService = CommonLangService; + } + + /// + /// 查询多语言配置列表 + /// + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "system:lang:list")] + public IActionResult QueryCommonLang([FromQuery] CommonLangQueryDto parm) + { + if (parm.ShowMode == 2) + { + PagedInfo pagedInfo = new() + { + Result = _CommonLangService.GetListToPivot(parm) + }; + + return SUCCESS(pagedInfo); + } + + return SUCCESS(_CommonLangService.GetList(parm)); + } + + /// + /// 查询多语言配置列表 + /// + /// + [HttpGet("list/{lang}")] + [AllowAnonymous] + public IActionResult QueryCommonLangs(string lang) + { + var msgList = _CommonLangService.GetLangList(new CommonLangQueryDto() { LangCode = lang }); + + return SUCCESS(_CommonLangService.SetLang(msgList)); + } + + /// + /// 查询多语言配置详情 + /// + /// + /// + [HttpGet("{Id}")] + [ActionPermissionFilter(Permission = "system:lang:query")] + public IActionResult GetCommonLang(long Id) + { + var response = _CommonLangService.GetFirst(x => x.Id == Id); + + var list = _CommonLangService.GetList(x => x.LangKey == response.LangKey); + var vo = list.Adapt>(); + var modal = new CommonLangDto() { LangKey = response.LangKey, LangList = vo }; + return SUCCESS(modal); + } + + /// + /// 查询多语言配置详情 + /// + /// + /// + [HttpGet("key/{langKey}")] + [ActionPermissionFilter(Permission = "system:lang:query")] + public IActionResult GetCommonLangByKey(string langKey) + { + var list = _CommonLangService.GetList(x => x.LangKey == langKey); + var vo = list.Adapt>(); + var modal = new CommonLangDto() { LangKey = langKey, LangList = vo }; + + return SUCCESS(modal); + } + + /// + /// 更新多语言配置 + /// + /// + [HttpPut] + [ActionPermissionFilter(Permission = "system:lang:edit")] + [Log(Title = "多语言配置", BusinessType = BusinessType.UPDATE)] + public IActionResult UpdateCommonLang([FromBody] CommonLangDto parm) + { + if (parm == null || parm.LangKey.IsEmpty()) + { + throw new CustomException("请求实体不能为空"); + } + + _CommonLangService.StorageCommonLang(parm); + + return ToResponse(1); + } + + /// + /// 删除多语言配置 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "system:lang:delete")] + [Log(Title = "多语言配置", BusinessType = BusinessType.DELETE)] + public IActionResult DeleteCommonLang(string ids) + { + long[] idsArr = Tools.SpitLongArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + + var response = _CommonLangService.Delete(idsArr); + + return ToResponse(response); + } + + /// + /// 导出多语言配置 + /// + /// + [Log(Title = "多语言配置", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] + [HttpGet("export")] + [ActionPermissionFilter(Permission = "system:lang:export")] + public IActionResult Export([FromQuery] CommonLangQueryDto parm) + { + parm.PageSize = 10000; + var list = _CommonLangService.GetList(parm).Result; + + string sFileName = ExportExcel(list, "CommonLang", "多语言配置"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + + } +} \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysConfigController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysConfigController.cs new file mode 100644 index 0000000..0dd9c1b --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysConfigController.cs @@ -0,0 +1,159 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Extensions; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using SqlSugar; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.Dto; +using ARW.Model.System; +using ARW.Model.System.Dto; +using ARW.Service.System; + +namespace ARW.Admin.WebApi.Controllers +{ + /// + /// 参数配置Controller + /// + [Verify] + [Route("system/config")] + public class SysConfigController : BaseController + { + /// + /// 参数配置接口 + /// + private readonly ISysConfigService _SysConfigService; + + public SysConfigController(ISysConfigService SysConfigService) + { + _SysConfigService = SysConfigService; + } + + /// + /// 查询参数配置列表 + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "system:config:list")] + public IActionResult QuerySysConfig([FromQuery] SysConfigQueryDto parm) + { + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(!parm.ConfigType.IsEmpty(),m => m.ConfigType == parm.ConfigType); + predicate = predicate.AndIF(!parm.ConfigName.IsEmpty(),m => m.ConfigName.Contains(parm.ConfigType)); + predicate = predicate.AndIF(!parm.ConfigKey.IsEmpty(),m => m.ConfigKey.Contains(parm.ConfigKey)); + predicate = predicate.AndIF(!parm.BeginTime.IsEmpty(),m => m.Create_time >= parm.BeginTime ); + predicate = predicate.AndIF(!parm.BeginTime.IsEmpty(),m => m.Create_time <= parm.EndTime); + + var response = _SysConfigService.GetPages(predicate.ToExpression(), parm); + + return SUCCESS(response); + } + + /// + /// 查询参数配置详情 + /// + /// + /// + [HttpGet("{ConfigId}")] + [ActionPermissionFilter(Permission = "system:config:query")] + public IActionResult GetSysConfig(int ConfigId) + { + var response = _SysConfigService.GetId(ConfigId); + + return SUCCESS(response); + } + + /// + /// 根据参数键名查询参数值 + /// + /// + /// + [HttpGet("configKey/{configKey}")] + [AllowAnonymous] + public IActionResult GetConfigKey(string configKey) + { + var response = _SysConfigService.Queryable().First(f=> f.ConfigKey == configKey); + + return SUCCESS(response?.ConfigValue); + } + + /// + /// 添加参数配置 + /// + /// + [HttpPost] + [ActionPermissionFilter(Permission = "system:config:add")] + [Log(Title = "参数配置添加", BusinessType = BusinessType.INSERT)] + public IActionResult AddSysConfig([FromBody] SysConfigDto parm) + { + if (parm == null) + { + throw new CustomException("请求参数错误"); + } + var model = parm.Adapt().ToCreate(HttpContext); + + return SUCCESS(_SysConfigService.Insert(model, it => new + { + it.ConfigName, + it.ConfigKey, + it.ConfigValue, + it.ConfigType, + it.Create_by, + it.Create_time, + it.Remark, + })); + } + + /// + /// 更新参数配置 + /// + /// + [HttpPut] + [ActionPermissionFilter(Permission = "system:config:update")] + [Log(Title = "参数配置修改", BusinessType = BusinessType.UPDATE)] + public IActionResult UpdateSysConfig([FromBody] SysConfigDto parm) + { + if (parm == null) + { + throw new CustomException("请求实体不能为空"); + } + var model = parm.Adapt().ToUpdate(HttpContext); + + var response = _SysConfigService.Update(w => w.ConfigId == model.ConfigId, it => new SysConfig() + { + ConfigName = model.ConfigName, + ConfigKey = model.ConfigKey, + ConfigValue = model.ConfigValue, + ConfigType = model.ConfigType, + Update_by = model.Update_by, + Update_time = model.Update_time, + Remark = model.Remark + }); + + return SUCCESS(response); + } + + /// + /// 删除参数配置 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "system:config:remove")] + [Log(Title = "参数配置删除", BusinessType = BusinessType.DELETE)] + public IActionResult DeleteSysConfig(string ids) + { + int[] idsArr = Tools.SpitIntArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + + var response = _SysConfigService.Delete(idsArr); + + return SUCCESS(response); + } + } +} \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysDeptController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysDeptController.cs new file mode 100644 index 0000000..9f48fd0 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysDeptController.cs @@ -0,0 +1,166 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Microsoft.AspNetCore.Mvc; +using System.Collections; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.System; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 部门 + /// + [Verify] + [Route("system/dept")] + public class SysDeptController : BaseController + { + public ISysDeptService DeptService; + public ISysUserService UserService; + public SysDeptController(ISysDeptService deptService + , ISysUserService userService) + { + DeptService = deptService; + UserService = userService; + } + + /// + /// 获取部门列表 + /// + /// + [ActionPermissionFilter(Permission = "system:dept:list")] + [HttpGet("list")] + public IActionResult List([FromQuery] SysDept dept) + { + return SUCCESS(DeptService.GetSysDepts(dept), TIME_FORMAT_FULL); + } + + /// + /// 查询部门列表(排除节点) + /// + /// + /// + [HttpGet("list/exclude/{deptId}")] + public IActionResult ExcludeChild(long deptId) + { + var depts = DeptService.GetSysDepts(new SysDept()); + + for (int i = 0; i < depts.Count; i++) + { + SysDept d = depts[i]; + long[] deptIds = Tools.SpitLongArrary(d.Ancestors); + if (d.DeptId == deptId || ((IList)deptIds).Contains(deptId)) + { + depts.Remove(d); + } + } + return SUCCESS(depts); + } + + /// + /// 获取部门下拉树列表 + /// + /// + /// + [HttpGet("treeselect")] + public IActionResult TreeSelect(SysDept dept) + { + var depts = DeptService.GetSysDepts(dept); + + return SUCCESS(DeptService.BuildDeptTreeSelect(depts), TIME_FORMAT_FULL); + } + + /// + /// 获取角色部门信息 + /// 加载对应角色部门列表树 + /// + /// + /// + [HttpGet("roleDeptTreeselect/{roleId}")] + public IActionResult RoleMenuTreeselect(int roleId) + { + var depts = DeptService.GetSysDepts(new SysDept()); + var checkedKeys = DeptService.SelectRoleDepts(roleId); + return SUCCESS(new + { + checkedKeys, + depts = DeptService.BuildDeptTreeSelect(depts), + }); + } + + /// + /// 根据部门编号获取详细信息 + /// + /// + [HttpGet("{deptId}")] + [ActionPermissionFilter(Permission = "system:dept:query")] + public IActionResult GetInfo(long deptId) + { + var info = DeptService.GetFirst(f => f.DeptId == deptId); + return SUCCESS(info); + } + + /// + /// 新增部门 + /// + /// + /// + [HttpPost] + [Log(Title = "部门管理", BusinessType = BusinessType.INSERT)] + [ActionPermissionFilter(Permission = "system:dept:add")] + public IActionResult Add([FromBody] SysDept dept) + { + if (UserConstants.NOT_UNIQUE.Equals(DeptService.CheckDeptNameUnique(dept))) + { + return ToResponse(GetApiResult(ResultCode.CUSTOM_ERROR, $"新增部门{dept.DeptName}失败,部门名称已存在")); + } + dept.Create_by = User.Identity.Name; + return ToResponse(ToJson(DeptService.InsertDept(dept))); + } + + /// + /// 修改部门 + /// + /// + /// + [HttpPut] + [Log(Title = "部门管理", BusinessType = BusinessType.UPDATE)] + [ActionPermissionFilter(Permission = "system:dept:update")] + public IActionResult Update([FromBody] SysDept dept) + { + if (UserConstants.NOT_UNIQUE.Equals(DeptService.CheckDeptNameUnique(dept))) + { + return ToResponse(GetApiResult(ResultCode.CUSTOM_ERROR, $"修改部门{dept.DeptName}失败,部门名称已存在")); + } + else if (dept.ParentId.Equals(dept.DeptId)) + { + return ToResponse(GetApiResult(ResultCode.CUSTOM_ERROR, $"修改部门{dept.DeptName}失败,上级部门不能是自己")); + } + dept.Update_by = User.Identity.Name; + return ToResponse(ToJson(DeptService.UpdateDept(dept))); + } + + /// + /// 删除部门 + /// + /// + [HttpDelete("{deptId}")] + [ActionPermissionFilter(Permission = "system:dept:remove")] + [Log(Title = "部门管理", BusinessType = BusinessType.DELETE)] + public IActionResult Remove(long deptId) + { + if (DeptService.Queryable().Count(it => it.ParentId == deptId && it.DelFlag == "0") > 0) + { + return ToResponse(GetApiResult(ResultCode.CUSTOM_ERROR, $"存在下级部门,不允许删除")); + } + if (UserService.Queryable().Count(it => it.DeptId == deptId && it.DelFlag == "0") > 0) + { + return ToResponse(GetApiResult(ResultCode.CUSTOM_ERROR, $"部门存在用户,不允许删除")); + } + + return SUCCESS(DeptService.Delete(deptId)); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysDictDataController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysDictDataController.cs new file mode 100644 index 0000000..b48d5e5 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysDictDataController.cs @@ -0,0 +1,137 @@ +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Model; +using ARW.Model.System; +using ARW.Model.System.Dto; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 数据字典信息 + /// + [Verify] + [Route("system/dict/data")] + public class SysDictDataController : BaseController + { + private readonly ISysDictDataService SysDictDataService; + private readonly ISysDictService SysDictService; + + public SysDictDataController(ISysDictService sysDictService, ISysDictDataService sysDictDataService) + { + SysDictService = sysDictService; + SysDictDataService = sysDictDataService; + } + + /// + /// 搜索 + /// + /// + /// + /// + [ActionPermissionFilter(Permission = "system:dict:list")] + [HttpGet("list")] + public IActionResult List([FromQuery] SysDictData dictData, [FromQuery] PagerInfo pagerInfo) + { + var list = SysDictDataService.SelectDictDataList(dictData, pagerInfo); + return SUCCESS(list); + } + + /// + /// 根据字典类型查询字典数据信息 + /// + /// + /// + [AllowAnonymous] + [HttpGet("type/{dictType}")] + public IActionResult DictType(string dictType) + { + return SUCCESS(SysDictDataService.SelectDictDataByType(dictType)); + } + + /// + /// 根据字典类型查询字典数据信息 + /// + /// + /// + [AllowAnonymous] + [HttpPost("types")] + public IActionResult DictTypes([FromBody] List dto) + { + var list = SysDictDataService.SelectDictDataByTypes(dto.Select(f => f.DictType).ToArray()); + List dataVos = new(); + + foreach (var dic in dto) + { + SysdictDataDto vo = new() + { + DictType = dic.DictType, + ColumnName = dic.ColumnName, + List = list.FindAll(f => f.DictType == dic.DictType) + }; + dataVos.Add(vo); + } + return SUCCESS(dataVos); + } + + /// + /// 查询字典数据详细 + /// + /// + /// + [AllowAnonymous] + [HttpGet("info/{dictCode}")] + public IActionResult GetInfo(long dictCode) + { + return SUCCESS(SysDictDataService.SelectDictDataById(dictCode)); + } + + /// + /// 添加 + /// + /// + /// + [ActionPermissionFilter(Permission = "system:dict:add")] + [Log(Title = "字典数据", BusinessType = BusinessType.INSERT)] + [HttpPost()] + public IActionResult Add([FromBody] SysDictData dict) + { + dict.Create_by = HttpContext.GetName(); + dict.Create_time = DateTime.Now; + return SUCCESS(SysDictDataService.InsertDictData(dict)); + } + + /// + /// 修改 + /// + /// + /// + [ActionPermissionFilter(Permission = "system:dict:edit")] + [Log(Title = "字典数据", BusinessType = BusinessType.UPDATE)] + [HttpPut()] + public IActionResult Edit([FromBody] SysDictData dict) + { + dict.Update_by = HttpContext.GetName(); + return SUCCESS(SysDictDataService.UpdateDictData(dict)); + } + + /// + /// 删除字典类型 + /// + /// + /// + [ActionPermissionFilter(Permission = "system:dict:remove")] + [Log(Title = "字典类型", BusinessType = BusinessType.DELETE)] + [HttpDelete("{dictCode}")] + public IActionResult Remove(string dictCode) + { + long[] dictCodes = Common.Tools.SpitLongArrary(dictCode); + + return SUCCESS(SysDictDataService.DeleteDictDataByIds(dictCodes)); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysDictTypeController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysDictTypeController.cs new file mode 100644 index 0000000..e1fa894 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysDictTypeController.cs @@ -0,0 +1,123 @@ +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model; +using ARW.Model.System; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 数据字典信息 + /// + [Verify] + [Route("system/dict/type")] + public class SysDictTypeController : BaseController + { + private readonly ISysDictService SysDictService; + + public SysDictTypeController(ISysDictService sysDictService) + { + SysDictService = sysDictService; + } + + /// + /// 查询 + /// + /// + /// + /// + [ActionPermissionFilter(Permission = "system:dict:list")] + [HttpGet("list")] + public IActionResult List([FromQuery] SysDictType dict, [FromQuery] PagerInfo pagerInfo) + { + var list = SysDictService.SelectDictTypeList(dict, pagerInfo); + + return SUCCESS(list, TIME_FORMAT_FULL); + } + + /// + /// 查询字典类型详细 + /// + /// + /// + [HttpGet("{dictId}")] + [ActionPermissionFilter(Permission = "system:dict:query")] + public IActionResult GetInfo(long dictId = 0) + { + return SUCCESS(SysDictService.GetInfo(dictId)); + } + + /// + /// 添加字典类型 + /// + /// + /// + [ActionPermissionFilter(Permission = "system:dict:add")] + [Log(Title = "字典操作", BusinessType = BusinessType.INSERT)] + [HttpPost("edit")] + public IActionResult Add([FromBody] SysDictType dict) + { + if (UserConstants.NOT_UNIQUE.Equals(SysDictService.CheckDictTypeUnique(dict))) + { + return ToResponse(ApiResult.Error($"新增字典'{dict.DictName}'失败,字典类型已存在")); + } + dict.Create_by = HttpContext.GetName(); + dict.Create_time = DateTime.Now; + return SUCCESS(SysDictService.InsertDictType(dict)); + } + + /// + /// 修改字典类型 + /// + /// + /// + [ActionPermissionFilter(Permission = "system:dict:edit")] + [Log(Title = "字典操作", BusinessType = BusinessType.UPDATE)] + [Route("edit")] + [HttpPut] + public IActionResult Edit([FromBody] SysDictType dict) + { + if (UserConstants.NOT_UNIQUE.Equals(SysDictService.CheckDictTypeUnique(dict))) + { + return ToResponse(ApiResult.Error($"修改字典'{dict.DictName}'失败,字典类型已存在")); + } + //设置添加人 + dict.Update_by = HttpContext.GetName(); + return SUCCESS(SysDictService.UpdateDictType(dict)); + } + + /// + /// 删除字典类型 + /// + /// + [ActionPermissionFilter(Permission = "system:dict:remove")] + [Log(Title = "删除字典类型", BusinessType = BusinessType.DELETE)] + [HttpDelete("{ids}")] + public IActionResult Remove(string ids) + { + long[] idss = Tools.SpitLongArrary(ids); + + return SUCCESS(SysDictService.DeleteDictTypeByIds(idss)); + } + + /// + /// 字典导出 + /// + /// + [Log(BusinessType = BusinessType.EXPORT, IsSaveResponseData = false, Title = "字典导出")] + [HttpGet("export")] + [ActionPermissionFilter(Permission = "system:dict:export")] + public IActionResult Export() + { + var list = SysDictService.GetAll(); + + string sFileName = ExportExcel(list, "sysdictType", "字典"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysFileController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysFileController.cs new file mode 100644 index 0000000..82da0cb --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysFileController.cs @@ -0,0 +1,101 @@ +using Microsoft.AspNetCore.Mvc; +using SqlSugar; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.System; +using ARW.Service.System.IService; +using ARW.Model.System.Dto; + +namespace ARW.Admin.WebApi.Controllers +{ + /// + /// 文件存储Controller + /// + [Verify] + [Route("tool/file")] + public class SysFileController : BaseController + { + /// + /// 文件存储接口 + /// + private readonly ISysFileService _SysFileService; + + public SysFileController(ISysFileService SysFileService) + { + _SysFileService = SysFileService; + } + + /// + /// 查询文件存储列表 + /// + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "tool:file:list")] + public IActionResult QuerySysFile([FromQuery] SysFileQueryDto parm) + { + //开始拼装查询条件 + var predicate = Expressionable.Create(); + //搜索条件查询语法参考Sqlsugar + predicate = predicate.AndIF(parm.BeginCreate_time != null, it => it.Create_time >= parm.BeginCreate_time); + predicate = predicate.AndIF(parm.EndCreate_time != null, it => it.Create_time <= parm.EndCreate_time); + predicate = predicate.AndIF(parm.StoreType != null, m => m.StoreType == parm.StoreType); + predicate = predicate.AndIF(parm.FileId != null, m => m.Id == parm.FileId); + predicate = predicate.And(m => m.IsDelete == false); + + //搜索条件查询语法参考Sqlsugar + var response = _SysFileService.GetPages(predicate.ToExpression(), parm, x => x.Id, OrderByType.Desc); + return SUCCESS(response); + } + + /// + /// 查询文件存储详情 + /// + /// + /// + [HttpGet("{Id}")] + [ActionPermissionFilter(Permission = "tool:file:query")] + public IActionResult GetSysFile(long Id) + { + var response = _SysFileService.GetFirst(x => x.Id == Id); + + return SUCCESS(response); + } + + /// + /// 删除文件存储 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "tool:file:delete")] + [Log(Title = "文件存储", BusinessType = BusinessType.DELETE)] + public IActionResult DeleteSysFile(string ids) + { + long[] idsArr = Tools.SpitLongArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + + var response = _SysFileService.Delete(idsArr); + //TODO 删除本地资源 + + return ToResponse(response); + } + + /// + /// 文件存储导出 + /// + /// + [Log(BusinessType = BusinessType.EXPORT, IsSaveResponseData = false, Title = "文件存储")] + [HttpGet("export")] + [ActionPermissionFilter(Permission = "tool:file:export")] + public IActionResult Export() + { + var list = _SysFileService.GetAll(); + + string sFileName = ExportExcel(list, "SysFile", "文件存储"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + } +} \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysLoginController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysLoginController.cs new file mode 100644 index 0000000..d0091ff --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysLoginController.cs @@ -0,0 +1,237 @@ +using Hei.Captcha; +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Model; +using IPTools.Core; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using UAParser; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Admin.WebApi.Framework; +using ARW.Common; +using ARW.Model.System; +using ARW.Model.System.Dto; +using ARW.Service.System; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 登录 + /// + public class SysLoginController : BaseController + { + static readonly NLog.Logger logger = NLog.LogManager.GetLogger("LoginController"); + private readonly IHttpContextAccessor httpContextAccessor; + private readonly ISysUserService sysUserService; + private readonly ISysMenuService sysMenuService; + private readonly ISysLoginService sysLoginService; + private readonly ISysPermissionService permissionService; + private readonly SecurityCodeHelper SecurityCodeHelper; + private readonly ISysConfigService sysConfigService; + private readonly ISysRoleService roleService; + private readonly OptionsSetting jwtSettings; + + public SysLoginController( + IHttpContextAccessor contextAccessor, + ISysMenuService sysMenuService, + ISysUserService sysUserService, + ISysLoginService sysLoginService, + ISysPermissionService permissionService, + ISysConfigService configService, + ISysRoleService sysRoleService, + SecurityCodeHelper captcha, + IOptions jwtSettings) + { + httpContextAccessor = contextAccessor; + SecurityCodeHelper = captcha; + this.sysMenuService = sysMenuService; + this.sysUserService = sysUserService; + this.sysLoginService = sysLoginService; + this.permissionService = permissionService; + this.sysConfigService = configService; + roleService = sysRoleService; + this.jwtSettings = jwtSettings.Value; + } + + + /// + /// 登录 + /// + /// 登录对象 + /// + [Route("login")] + [HttpPost] + //[Log(Title = "登录")] + public IActionResult Login([FromBody] LoginBodyDto loginBody) + { + if (loginBody == null) { throw new CustomException("请求参数错误"); } + loginBody.LoginIP = HttpContextExtension.GetClientUserIp(HttpContext); + SysConfig sysConfig = sysConfigService.GetSysConfigByKey("sys.account.captchaOnOff"); + if (sysConfig?.ConfigValue != "off" && CacheHelper.Get(loginBody.Uuid) is string str && !str.ToLower().Equals(loginBody.Code.ToLower())) + { + return ToResponse(ResultCode.CAPTCHA_ERROR, "验证码错误"); + } + + var user = sysLoginService.Login(loginBody, RecordLogInfo(httpContextAccessor.HttpContext)); + + List roles = roleService.SelectUserRoleListByUserId(user.UserId); + //权限集合 eg *:*:*,system:user:list + List permissions = permissionService.GetMenuPermission(user); + + LoginUser loginUser = new(user, roles, permissions); + CacheService.SetUserPerms(GlobalConstant.UserPermKEY + user.UserId, permissions); + return SUCCESS(JwtUtil.GenerateJwtToken(JwtUtil.AddClaims(loginUser), jwtSettings.JwtSettings)); + } + + /// + /// 注销 + /// + /// + [Log(Title = "注销")] + [HttpPost("logout")] + public IActionResult LogOut() + { + //Task.Run(async () => + //{ + // //注销登录的用户,相当于ASP.NET中的FormsAuthentication.SignOut + // await HttpContext.SignOutAsync(); + //}).Wait(); + var userid = HttpContext.GetUId(); + var name = HttpContext.GetName(); + + CacheService.RemoveUserPerms(GlobalConstant.UserPermKEY + userid); + return SUCCESS(new { name, id = userid }); + } + + /// + /// 获取用户信息 + /// + /// + [Verify] + [HttpGet("getInfo")] + public IActionResult GetUserInfo() + { + long userid = HttpContext.GetUId(); + var user = sysUserService.SelectUserById(userid); + + //前端校验按钮权限使用 + //角色集合 eg: admin,yunying,common + List roles = permissionService.GetRolePermission(user); + //权限集合 eg *:*:*,system:user:list + List permissions = permissionService.GetMenuPermission(user); + user.WelcomeContent = GlobalConstant.WelcomeMessages[new Random().Next(0, GlobalConstant.WelcomeMessages.Length)]; + return SUCCESS(new { user, roles, permissions }); + } + + /// + /// 获取路由信息 + /// + /// + [Verify] + [HttpGet("getRouters")] + public IActionResult GetRouters() + { + long uid = HttpContext.GetUId(); + var menus = sysMenuService.SelectMenuTreeByUserId(uid); + + return ToResponse(ToJson(1, sysMenuService.BuildMenus(menus))); + } + + /// + /// 生成图片验证码 + /// + /// + [HttpGet("captchaImage")] + public ApiResult CaptchaImage() + { + string uuid = Guid.NewGuid().ToString().Replace("-", ""); + + SysConfig sysConfig = sysConfigService.GetSysConfigByKey("sys.account.captchaOnOff"); + var captchaOff = sysConfig?.ConfigValue ?? "0"; + + var code = SecurityCodeHelper.GetRandomEnDigitalText(4); + byte[] imgByte; + if (captchaOff == "1") + { + imgByte = SecurityCodeHelper.GetGifEnDigitalCodeByte(code);//动态gif数字字母 + } + else if (captchaOff == "2") + { + imgByte = SecurityCodeHelper.GetGifBubbleCodeByte(code);//动态gif泡泡 + } + else if (captchaOff == "3") + { + imgByte = SecurityCodeHelper.GetBubbleCodeByte(code);//泡泡 + } + else + { + imgByte = SecurityCodeHelper.GetEnDigitalCodeByte(code);//英文字母加数字 + } + string base64Str = Convert.ToBase64String(imgByte); + CacheHelper.SetCache(uuid, code); + var obj = new { uuid, img = base64Str };// File(stream, "image/png") + + return ToJson(1, obj); + } + + /// + /// 记录用户登陆信息 + /// + /// + /// + public SysLogininfor RecordLogInfo(HttpContext context) + { + var ipAddr = context.GetClientUserIp(); + var ip_info = IpTool.Search(ipAddr); + ClientInfo clientInfo = context.GetClientInfo(); + SysLogininfor sysLogininfor = new() + { + browser = clientInfo.Device.Family, + os = clientInfo.OS.ToString(), + ipaddr = ipAddr, + userName = context.GetName(), + loginLocation = ip_info.Province + "-" + ip_info.City + }; + + return sysLogininfor; + } + + /// + /// 注册 + /// + /// + /// + [HttpPost("/register")] + [AllowAnonymous] + [Log(Title = "注册", BusinessType = Infrastructure.Enums.BusinessType.INSERT)] + public IActionResult Register([FromBody] RegisterDto dto) + { + SysConfig config = sysConfigService.GetSysConfigByKey("sys.account.register"); + if (config?.ConfigValue != "true") + { + return ToResponse(ResultCode.CUSTOM_ERROR, "当前系统没有开启注册功能!"); + } + SysConfig sysConfig = sysConfigService.GetSysConfigByKey("sys.account.captchaOnOff"); + if (sysConfig?.ConfigValue != "off" && CacheHelper.Get(dto.Uuid) is string str && !str.ToLower().Equals(dto.Code.ToLower())) + { + return ToResponse(ResultCode.CAPTCHA_ERROR, "验证码错误"); + } + if (UserConstants.NOT_UNIQUE.Equals(sysUserService.CheckUserNameUnique(dto.Username))) + { + return ToResponse(ResultCode.CUSTOM_ERROR, $"保存用户{dto.Username}失败,注册账号已存在"); + } + SysUser user = sysUserService.Register(dto); + if (user.UserId > 0) + { + return SUCCESS(user); + } + return ToResponse(ResultCode.CUSTOM_ERROR, "注册失败,请联系管理员"); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysMenuController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysMenuController.cs new file mode 100644 index 0000000..7c21241 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysMenuController.cs @@ -0,0 +1,200 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Model.System; +using ARW.Model.System.Dto; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 系统菜单 + /// + [Verify] + [Route("/system/menu")] + public class SysMenuController : BaseController + { + private readonly ISysRoleService sysRoleService; + private readonly ISysMenuService sysMenuService; + + public SysMenuController( + ISysRoleService sysRoleService, + ISysMenuService sysMenuService) + { + this.sysRoleService = sysRoleService; + this.sysMenuService = sysMenuService; + } + + /// + /// 获取菜单列表 + /// + /// + [ActionPermissionFilter(Permission = "system:menu:list")] + [HttpGet("list")] + public IActionResult TreeMenuList([FromQuery] MenuQueryDto menu) + { + long userId = HttpContext.GetUId(); + return SUCCESS(sysMenuService.SelectTreeMenuList(menu, userId), "yyyy-MM-dd HH:mm:ss"); + } + + /// + /// 根据菜单编号获取详细信息 + /// + /// + /// + [HttpGet("{menuId}")] + [ActionPermissionFilter(Permission = "system:menu:query")] + public IActionResult GetMenuInfo(int menuId = 0) + { + return SUCCESS(sysMenuService.GetMenuByMenuId(menuId), "yyyy-MM-dd HH:mm:ss"); + } + + /// + /// 根据菜单编号获取菜单列表,菜单管理首次进入 + /// + /// + /// + [HttpGet("list/{menuId}")] + [ActionPermissionFilter(Permission = "system:menu:query")] + public IActionResult GetMenuList(int menuId = 0) + { + return SUCCESS(sysMenuService.GetMenusByMenuId(menuId), "yyyy-MM-dd HH:mm:ss"); + } + + /// + /// 获取角色菜单信息 + /// 加载对应角色菜单列表树 + /// + /// + /// + [HttpGet("roleMenuTreeselect/{roleId}")] + public IActionResult RoleMenuTreeselect(int roleId) + { + long userId = HttpContext.GetUId(); + var menus = sysMenuService.SelectMenuList(new MenuQueryDto(), userId); + var checkedKeys = sysRoleService.SelectUserRoleMenus(roleId); + return SUCCESS(new + { + checkedKeys, + menus = sysMenuService.BuildMenuTreeSelect(menus), + }); + } + + /// + /// 修改菜单 + /// + /// + /// + [HttpPost("edit")] + [Log(Title = "菜单管理", BusinessType = BusinessType.UPDATE)] + [ActionPermissionFilter(Permission = "system:menu:edit")] + public IActionResult MenuEdit([FromBody] MenuDto menuDto) + { + if (menuDto == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); } + //if (UserConstants.NOT_UNIQUE.Equals(sysMenuService.CheckMenuNameUnique(MenuDto))) + //{ + // return ToResponse(ApiResult.Error($"修改菜单'{MenuDto.menuName}'失败,菜单名称已存在")); + //} + var config = new TypeAdapterConfig(); + //映射规则 + config.ForType() + .NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);//忽略字段名称的大小写;//忽略除以上配置的所有字段 + + var modal = menuDto.Adapt(config).ToUpdate(HttpContext); + if (UserConstants.YES_FRAME.Equals(modal.isFrame) && !modal.path.StartsWith("http")) + { + return ToResponse(ApiResult.Error($"修改菜单'{modal.MenuName}'失败,地址必须以http(s)://开头")); + } + if (modal.MenuId.Equals(modal.parentId)) + { + return ToResponse(ApiResult.Error($"修改菜单'{modal.MenuName}'失败,上级菜单不能选择自己")); + } + modal.Update_by = HttpContext.GetName(); + int result = sysMenuService.EditMenu(modal); + + return ToResponse(result); + } + + /// + /// 添加菜单 + /// + /// + /// + [HttpPut("add")] + [Log(Title = "菜单管理", BusinessType = BusinessType.INSERT)] + [ActionPermissionFilter(Permission = "system:menu:add")] + public IActionResult MenuAdd([FromBody] MenuDto menuDto) + { + var config = new TypeAdapterConfig(); + //映射规则 + config.ForType() + .NameMatchingStrategy(NameMatchingStrategy.IgnoreCase); + var menu = menuDto.Adapt(config).ToCreate(HttpContext); + + if (menu == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); } + if (UserConstants.NOT_UNIQUE.Equals(sysMenuService.CheckMenuNameUnique(menu))) + { + return ToResponse(ApiResult.Error($"新增菜单'{menu.MenuName}'失败,菜单名称已存在")); + } + if (UserConstants.YES_FRAME.Equals(menu.isFrame) && !menu.path.StartsWith("http")) + { + return ToResponse(ApiResult.Error($"新增菜单'{menu.MenuName}'失败,地址必须以http(s)://开头")); + } + + menu.Create_by = HttpContext.GetName(); + int result = sysMenuService.AddMenu(menu); + + return ToResponse(result); + } + + /// + /// 菜单删除 + /// + /// + /// + [HttpDelete("{menuId}")] + [Log(Title = "菜单管理", BusinessType = BusinessType.DELETE)] + [ActionPermissionFilter(Permission = "system:menu:remove")] + public IActionResult Remove(int menuId = 0) + { + if (sysMenuService.HasChildByMenuId(menuId)) + { + return ToResponse(ResultCode.CUSTOM_ERROR, "存在子菜单,不允许删除"); + } + if (sysMenuService.CheckMenuExistRole(menuId)) + { + return ToResponse(ResultCode.CUSTOM_ERROR, "菜单已分配,不允许删除"); + } + int result = sysMenuService.DeleteMenuById(menuId); + + return ToResponse(result); + } + + /// + /// 保存排序 + /// + /// + /// + /// + [ActionPermissionFilter(Permission = "system:menu:update")] + [HttpGet("ChangeSort")] + [Log(Title = "保存排序", BusinessType = BusinessType.UPDATE)] + public IActionResult ChangeSort(int id = 0, int value = 0) + { + MenuDto MenuDto = new() + { + MenuId = id, + orderNum = value + }; + if (MenuDto == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); } + + int result = sysMenuService.ChangeSortMenu(MenuDto); + return ToResponse(result); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysNoticeController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysNoticeController.cs new file mode 100644 index 0000000..0a793d5 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysNoticeController.cs @@ -0,0 +1,200 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Constant; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.SignalR; +using SqlSugar; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Admin.WebApi.Hubs; +using ARW.Common; +using ARW.Model.System; +using ARW.Model.System.Dto; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 系统通知 + /// + [Verify] + [Route("system/notice")] + public class SysNoticeController : BaseController + { + /// + /// 通知公告表接口 + /// + private readonly ISysNoticeService _SysNoticeService; + private readonly IHubContext _hubContext; + + public SysNoticeController(ISysNoticeService SysNoticeService, IHubContext hubContext) + { + _SysNoticeService = SysNoticeService; + _hubContext = hubContext; + } + + /// + /// 查询通知公告表列表 + /// + /// + [HttpGet("queryNotice")] + public IActionResult QueryNotice([FromQuery] SysNoticeQueryDto parm) + { + var predicate = Expressionable.Create(); + + predicate = predicate.And(m => m.Status == "0"); + var response = _SysNoticeService.GetPages(predicate.ToExpression(), parm); + return SUCCESS(response); + } + + /// + /// 查询通知公告表列表 + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "system:notice:list")] + public IActionResult QuerySysNotice([FromQuery] SysNoticeQueryDto parm) + { + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.NoticeTitle), m => m.NoticeTitle.Contains(parm.NoticeTitle)); + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.NoticeType), m => m.NoticeType == parm.NoticeType); + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.CreateBy), m => m.Create_by.Contains(parm.CreateBy) || m.Update_by.Contains(parm.CreateBy)); + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Status), m => m.Status == parm.Status); + var response = _SysNoticeService.GetPages(predicate.ToExpression(), parm); + return SUCCESS(response); + } + + /// + /// 查询通知公告表详情 + /// + /// + /// + [HttpGet("{NoticeId}")] + [ActionPermissionFilter(Permission = "system:notice:query")] + public IActionResult GetSysNotice(int NoticeId) + { + var response = _SysNoticeService.GetFirst(x => x.NoticeId == NoticeId); + + return SUCCESS(response); + } + + /// + /// 添加通知公告表 + /// + /// + [HttpPost] + [ActionPermissionFilter(Permission = "system:notice:add")] + [Log(Title = "通知公告表", BusinessType = BusinessType.INSERT)] + public IActionResult AddSysNotice([FromBody] SysNoticeDto parm) + { + if (parm == null) + { + throw new CustomException("请求参数错误"); + } + //从 Dto 映射到 实体 + var modal = parm.Adapt().ToCreate(HttpContext); + modal.Create_by = HttpContext.GetName(); + modal.Create_time = DateTime.Now; + + int result = _SysNoticeService.Insert(modal, it => new + { + it.NoticeTitle, + it.NoticeType, + it.NoticeContent, + it.Status, + it.Remark, + it.Create_by, + it.Create_time + }); + + return SUCCESS(result); + } + + /// + /// 更新通知公告表 + /// + /// + [HttpPut] + [ActionPermissionFilter(Permission = "system:notice:update")] + [Log(Title = "通知公告表", BusinessType = BusinessType.UPDATE)] + public IActionResult UpdateSysNotice([FromBody] SysNoticeDto parm) + { + if (parm == null) + { + throw new CustomException("请求实体不能为空"); + } + //从 Dto 映射到 实体 + var model = parm.Adapt().ToUpdate(HttpContext); + + var response = _SysNoticeService.Update(w => w.NoticeId == model.NoticeId, it => new SysNotice() + { + //Update 字段映射 + NoticeTitle = model.NoticeTitle, + NoticeType = model.NoticeType, + NoticeContent = model.NoticeContent, + Status = model.Status, + Remark = model.Remark, + Update_by = HttpContext.GetName(), + Update_time = DateTime.Now + }); + + return SUCCESS(response); + } + /// + /// 发送通知公告表 + /// + /// + [HttpPut("send/{NoticeId}")] + [ActionPermissionFilter(Permission = "system:notice:update")] + [Log(Title = "通知公告表", BusinessType = BusinessType.OTHER)] + public IActionResult SendNotice(int NoticeId = 0) + { + if (NoticeId <= 0) + { + throw new CustomException("请求实体不能为空"); + } + var response = _SysNoticeService.GetFirst(x => x.NoticeId == NoticeId); + if (response != null && response.Status == "0") + { + _hubContext.Clients.All.SendAsync(HubsConstant.ReceiveNotice, response.NoticeTitle, response.NoticeContent); + } + return SUCCESS(response); + } + + /// + /// 删除通知公告表 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "system:notice:delete")] + [Log(Title = "通知公告表", BusinessType = BusinessType.DELETE)] + public IActionResult DeleteSysNotice(string ids) + { + int[] idsArr = Tools.SpitIntArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + + var response = _SysNoticeService.Delete(idsArr); + + return SUCCESS(response); + } + + /// + /// 通知公告表导出 + /// + /// + [Log(BusinessType = BusinessType.EXPORT, IsSaveResponseData = false, Title = "通知公告表")] + [HttpGet("export")] + [ActionPermissionFilter(Permission = "system:notice:export")] + public IActionResult Export() + { + var list = _SysNoticeService.GetAll(); + + string sFileName = ExportExcel(list, "SysNotice", "通知公告表"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + } +} \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysPostController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysPostController.cs new file mode 100644 index 0000000..c40c94c --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysPostController.cs @@ -0,0 +1,141 @@ +using Microsoft.AspNetCore.Mvc; +using SqlSugar; +using System.Collections.Generic; +using ARW.Admin.WebApi.Filters; +using ARW.Model; +using ARW.Model.System; +using Infrastructure.Extensions; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure; +using ARW.Service.System.IService; +using ARW.Common; +using ARW.Admin.WebApi.Extensions; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 岗位管理 + /// + [Verify] + [Route("system/post")] + public class SysPostController : BaseController + { + private readonly ISysPostService PostService; + public SysPostController(ISysPostService postService) + { + PostService = postService; + } + + /// + /// 岗位列表查询 + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "system:post:list")] + public IActionResult List([FromQuery] SysPost post, [FromQuery] PagerInfo pagerInfo) + { + var predicate = Expressionable.Create(); + predicate = predicate.AndIF(post.Status.IfNotEmpty(), it => it.Status == post.Status); + var list = PostService.GetPages(predicate.ToExpression(), pagerInfo, s => new { s.PostSort }); + + return SUCCESS(list); + } + + /// + /// 岗位查询 + /// + /// + /// + [HttpGet("{postId}")] + [ActionPermissionFilter(Permission = "system:post:query")] + public IActionResult Query(long postId = 0) + { + return SUCCESS(PostService.GetId(postId)); + } + + /// + /// 岗位管理 + /// + /// + /// + [HttpPost] + [ActionPermissionFilter(Permission = "system:post:add")] + [Log(Title = "岗位添加", BusinessType = BusinessType.INSERT)] + public IActionResult Add([FromBody] SysPost post) + { + if (UserConstants.NOT_UNIQUE.Equals(PostService.CheckPostNameUnique(post))) + { + throw new CustomException($"修改岗位{post.PostName}失败,岗位名已存在"); + } + if (UserConstants.NOT_UNIQUE.Equals(PostService.CheckPostCodeUnique(post))) + { + throw new CustomException($"修改岗位{post.PostName}失败,岗位编码已存在"); + } + + post.Create_by = HttpContext.GetName(); + return ToResponse(ToJson(PostService.Add(post))); + } + + /// + /// 岗位管理 + /// + /// + /// + [HttpPut] + [ActionPermissionFilter(Permission = "system:post:edit")] + [Log(Title = "岗位编辑", BusinessType = BusinessType.UPDATE)] + public IActionResult Update([FromBody] SysPost post) + { + if (UserConstants.NOT_UNIQUE.Equals(PostService.CheckPostNameUnique(post))) + { + throw new CustomException($"修改岗位{post.PostName}失败,岗位名已存在"); + } + if (UserConstants.NOT_UNIQUE.Equals(PostService.CheckPostCodeUnique(post))) + { + throw new CustomException($"修改岗位{post.PostName}失败,岗位编码已存在"); + } + post.Update_by = HttpContext.GetName(); + return ToResponse(PostService.Update(post)); + } + + /// + /// 岗位删除 + /// + /// + /// + [HttpDelete("{id}")] + [ActionPermissionFilter(Permission = "system:post:remove")] + [Log(Title = "岗位删除", BusinessType = BusinessType.DELETE)] + public IActionResult Delete(string id) + { + int[] ids = Tools.SpitIntArrary(id); + return ToResponse(ToJson(PostService.Delete(ids))); + } + + /// + /// 获取岗位选择框列表 + /// + [HttpGet("optionselect")] + public IActionResult Optionselect() + { + List posts = PostService.GetAll(); + return SUCCESS(posts); + } + + /// + /// 岗位导出 + /// + /// + [Log(BusinessType = BusinessType.EXPORT, IsSaveResponseData = false, Title= "岗位导出")] + [HttpGet("export")] + [ActionPermissionFilter(Permission = "system:post:export")] + public IActionResult Export() + { + var list = PostService.GetAll(); + + string sFileName = ExportExcel(list, "syspost", "岗位"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysProfileController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysProfileController.cs new file mode 100644 index 0000000..9b81689 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysProfileController.cs @@ -0,0 +1,139 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using System; +using System.Threading.Tasks; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Model.System; +using ARW.Model.System.Dto; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 个人中心 + /// + [Verify] + [Route("system/user/profile")] + public class SysProfileController : BaseController + { + private readonly ISysUserService UserService; + private readonly ISysRoleService RoleService; + private readonly ISysUserPostService UserPostService; + private readonly ISysDeptService DeptService; + private readonly ISysFileService FileService; + private IWebHostEnvironment hostEnvironment; + + public SysProfileController( + ISysUserService userService, + ISysRoleService roleService, + ISysUserPostService postService, + ISysDeptService deptService, + ISysFileService sysFileService, + IWebHostEnvironment hostEnvironment) + { + UserService = userService; + RoleService = roleService; + UserPostService = postService; + DeptService = deptService; + FileService = sysFileService; + this.hostEnvironment = hostEnvironment; + } + + /// + /// 个人中心用户信息获取 + /// + /// + [HttpGet] + public IActionResult Profile() + { + long userId = HttpContext.GetUId(); + var user = UserService.SelectUserById(userId); + + var roles = RoleService.SelectUserRoleNames(userId); + var postGroup = UserPostService.GetPostsStrByUserId(userId); + var deptInfo = DeptService.GetFirst(f => f.DeptId == user.DeptId); + user.DeptName = deptInfo?.DeptName ?? "-"; + + return SUCCESS(new { user, roles, postGroup }, TIME_FORMAT_FULL); + } + + /// + /// 修改用户 + /// + /// + [HttpPut] + [ActionPermissionFilter(Permission = "common")] + [Log(Title = "修改信息", BusinessType = BusinessType.UPDATE)] + public IActionResult UpdateProfile([FromBody] SysUserDto userDto) + { + if (userDto == null) + { + throw new CustomException(ResultCode.PARAM_ERROR, "请求参数错误"); + } + var user = userDto.Adapt().ToUpdate(HttpContext); + + int result = UserService.ChangeUser(user); + return ToResponse(result); + } + + /// + /// 修改密码 + /// + /// + [HttpPut("updatePwd")] + [ActionPermissionFilter(Permission = "common")] + [Log(Title = "修改密码", BusinessType = BusinessType.UPDATE)] + public IActionResult UpdatePwd(string oldPassword, string newPassword) + { + LoginUser loginUser = Framework.JwtUtil.GetLoginUser(HttpContext); + + SysUser user = UserService.SelectUserById(loginUser.UserId); + string oldMd5 = NETCore.Encrypt.EncryptProvider.Md5(oldPassword); + string newMd5 = NETCore.Encrypt.EncryptProvider.Md5(newPassword); + + if (!user.Password.Equals(oldMd5, StringComparison.OrdinalIgnoreCase)) + { + return ToResponse(ApiResult.Error("修改密码失败,旧密码错误")); + } + if (user.Password.Equals(newMd5, StringComparison.OrdinalIgnoreCase)) + { + return ToResponse(ApiResult.Error("新密码不能和旧密码相同")); + } + if (UserService.ResetPwd(loginUser.UserId, newMd5.ToLower()) > 0) + { + //TODO 更新缓存 + + return SUCCESS(1); + } + + return ToResponse(ApiResult.Error("修改密码异常,请联系管理员")); + } + + /// + /// 修改头像 + /// + /// + /// + [HttpPost("Avatar")] + [ActionPermissionFilter(Permission = "common")] + [Log(Title = "修改头像", BusinessType = BusinessType.UPDATE, IsSaveRequestData = false)] + public async Task Avatar([FromForm(Name = "picture")] IFormFile formFile) + { + LoginUser loginUser = Framework.JwtUtil.GetLoginUser(HttpContext); + if (formFile == null) throw new CustomException("请选择文件"); + + SysFile file = await FileService.SaveFileToLocal(hostEnvironment.WebRootPath, "", "avatar", HttpContext.GetName(), formFile); + + UserService.UpdatePhoto(new SysUser() { Avatar = file.AccessUrl, UserId = loginUser.UserId }); + return SUCCESS(new { imgUrl = file.AccessUrl }); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysRoleController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysRoleController.cs new file mode 100644 index 0000000..7f8e908 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysRoleController.cs @@ -0,0 +1,180 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Microsoft.AspNetCore.Mvc; +using ARW.Common; +using ARW.Admin.WebApi.Filters; +using ARW.Model; +using ARW.Model.System; +using ARW.Service.System.IService; +using ARW.Admin.WebApi.Extensions; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 角色信息 + /// + [Verify] + [Route("system/role")] + public class SysRoleController : BaseController + { + private readonly ISysRoleService sysRoleService; + + public SysRoleController( + ISysRoleService sysRoleService) + { + this.sysRoleService = sysRoleService; + } + + /// + /// 获取系统角色管理 + /// + /// + [ActionPermissionFilter(Permission = "system:role:list")] + [HttpGet("list")] + public IActionResult List([FromQuery] SysRole role, [FromQuery] PagerInfo pager) + { + var list = sysRoleService.SelectRoleList(role, pager); + + return SUCCESS(list, TIME_FORMAT_FULL); + } + + /// + /// 根据角色编号获取详细信息 + /// + /// + /// + [HttpGet("{roleId}")] + public IActionResult GetInfo(long roleId = 0) + { + var info = sysRoleService.SelectRoleById(roleId); + + return SUCCESS(info, TIME_FORMAT_FULL); + } + + /// + /// 添加角色 + /// + /// + /// + [HttpPost] + [ActionPermissionFilter(Permission = "system:role:add")] + [Log(Title = "角色管理", BusinessType = BusinessType.INSERT)] + [Route("edit")] + public IActionResult RoleAdd([FromBody] SysRole sysRoleDto) + { + if (sysRoleDto == null) return ToResponse(ApiResult.Error(101, "请求参数错误")); + + if (UserConstants.NOT_UNIQUE.Equals(sysRoleService.CheckRoleKeyUnique(sysRoleDto))) + { + return ToResponse(ApiResult.Error((int)ResultCode.CUSTOM_ERROR, $"新增角色'{sysRoleDto.RoleName}'失败,角色权限已存在")); + } + + sysRoleDto.Create_by = HttpContext.GetName(); + long roleId = sysRoleService.InsertRole(sysRoleDto); + + return ToResponse(ToJson(roleId)); + } + + /// + /// 修改角色 √ + /// + /// + /// + [HttpPut] + [ActionPermissionFilter(Permission = "system:role:edit")] + [Log(Title = "角色管理", BusinessType = BusinessType.UPDATE)] + [Route("edit")] + public IActionResult RoleEdit([FromBody] SysRole sysRoleDto) + { + if (sysRoleDto == null || sysRoleDto.RoleId <= 0 || string.IsNullOrEmpty(sysRoleDto.RoleKey)) + { + return ToResponse(ApiResult.Error(101, "请求参数错误")); + } + sysRoleService.CheckRoleAllowed(sysRoleDto); + var info = sysRoleService.SelectRoleById(sysRoleDto.RoleId); + if (info != null && info.RoleKey != sysRoleDto.RoleKey) + { + if (UserConstants.NOT_UNIQUE.Equals(sysRoleService.CheckRoleKeyUnique(sysRoleDto))) + { + return ToResponse(ApiResult.Error($"编辑角色'{sysRoleDto.RoleName}'失败,角色权限已存在")); + } + } + sysRoleDto.Update_by = HttpContext.GetName(); + int upResult = sysRoleService.UpdateRole(sysRoleDto); + if (upResult > 0) + { + return SUCCESS(upResult); + } + return ToResponse(ApiResult.Error($"修改角色'{sysRoleDto.RoleName}'失败,请联系管理员")); + } + + /// + /// 根据角色分配菜单 + /// + /// + /// + [HttpPut("dataScope")] + [ActionPermissionFilter(Permission = "system:role:authorize")] + [Log(Title = "角色管理", BusinessType = BusinessType.UPDATE)] + public IActionResult DataScope([FromBody] SysRole sysRoleDto) + { + if (sysRoleDto == null || sysRoleDto.RoleId <= 0) return ToResponse(ApiResult.Error(101, "请求参数错误")); + + sysRoleDto.Create_by = HttpContext.GetName(); + sysRoleService.CheckRoleAllowed(sysRoleDto); + + bool result = sysRoleService.AuthDataScope(sysRoleDto); + + return SUCCESS(result); + } + + /// + /// 角色删除 + /// + /// + /// + [HttpDelete("{roleId}")] + [Log(Title = "角色管理", BusinessType = BusinessType.DELETE)] + [ActionPermissionFilter(Permission = "system:role:remove")] + public IActionResult Remove(string roleId) + { + long[] roleIds = Tools.SpitLongArrary(roleId); + int result = sysRoleService.DeleteRoleByRoleId(roleIds); + + return ToResponse(ToJson(result)); + } + + /// + /// 修改角色状态 + /// + /// 角色对象 + /// + [HttpPut("changeStatus")] + [Log(Title = "修改角色状态", BusinessType = BusinessType.UPDATE)] + [ActionPermissionFilter(Permission = "system:role:edit")] + public IActionResult ChangeStatus([FromBody] SysRole roleDto) + { + sysRoleService.CheckRoleAllowed(roleDto); + int result = sysRoleService.UpdateRoleStatus(roleDto); + + return ToResponse(ToJson(result)); + } + + /// + /// 角色导出 + /// + /// + [Log(BusinessType = BusinessType.EXPORT, IsSaveResponseData = false, Title = "角色导出")] + [HttpGet("export")] + //[ActionPermissionFilter(Permission = "system:role:export")] + public IActionResult Export() + { + var list = sysRoleService.SelectRoleAll(); + + string sFileName = ExportExcel(list, "sysrole", "角色"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysUserController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysUserController.cs new file mode 100644 index 0000000..805d857 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysUserController.cs @@ -0,0 +1,221 @@ +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using System.IO; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model; +using ARW.Model.System; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 用户管理 + /// + [Verify] + [Route("system/user")] + public class SysUserController : BaseController + { + private readonly ISysUserService UserService; + private readonly ISysRoleService RoleService; + private readonly ISysPostService PostService; + private readonly ISysUserPostService UserPostService; + + public SysUserController( + ISysUserService userService, + ISysRoleService roleService, + ISysPostService postService, + ISysUserPostService userPostService) + { + UserService = userService; + RoleService = roleService; + PostService = postService; + UserPostService = userPostService; + } + + /// + /// 用户管理 -> 获取用户 + /// /system/user/list + /// + /// + [ActionPermissionFilter(Permission = "system:user:list")] + [HttpGet("list")] + public IActionResult List([FromQuery] SysUser user, PagerInfo pager) + { + var list = UserService.SelectUserList(user, pager); + + return SUCCESS(list, TIME_FORMAT_FULL); + } + + /// + /// 用户管理 -> 编辑、添加用户获取用户,信息查询 + /// + /// + /// + [HttpGet("")] + [HttpGet("{userId:int=0}")] + public IActionResult GetInfo(int userId) + { + Dictionary dic = new(); + var roles = RoleService.SelectRoleAll(); + dic.Add("roles", roles); + //dic.Add("roles", SysUser.IsAdmin(userId) ? roles : roles.FindAll(f => !f.IsAdmin())); + dic.Add("posts", PostService.GetAll()); + + //编辑 + if (userId > 0) + { + SysUser sysUser = UserService.SelectUserById(userId); + dic.Add("user", sysUser); + dic.Add("postIds", UserPostService.GetUserPostsByUserId(userId)); + dic.Add("roleIds", sysUser.RoleIds); + } + + return ToResponse(ApiResult.Success(dic)); + } + + /// + /// 添加用户 + /// + /// + /// + [HttpPost("add")] + [Log(Title = "用户管理", BusinessType = BusinessType.INSERT)] + [ActionPermissionFilter(Permission = "system:user:add")] + public IActionResult AddUser([FromBody] SysUser user) + { + if (user == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); } + if (UserConstants.NOT_UNIQUE.Equals(UserService.CheckUserNameUnique(user.UserName))) + { + return ToResponse(ApiResult.Error($"新增用户 '{user.UserName}'失败,登录账号已存在")); + } + + user.Create_by = HttpContext.GetName(); + user.Password = NETCore.Encrypt.EncryptProvider.Md5(user.Password); + + return ToResponse(UserService.InsertUser(user)); + } + + /// + /// 修改用户 + /// + /// + /// + [HttpPut("edit")] + [Log(Title = "用户管理", BusinessType = BusinessType.UPDATE)] + [ActionPermissionFilter(Permission = "system:user:edit")] + public IActionResult UpdateUser([FromBody] SysUser user) + { + if (user == null || user.UserId <= 0) { return ToResponse(ApiResult.Error(101, "请求参数错误")); } + + user.Update_by = HttpContext.GetName(); + int upResult = UserService.UpdateUser(user); + + return ToResponse(upResult); + } + + /// + /// 改变用户状态 + /// + /// + /// + [HttpPut("changeStatus")] + [Log(Title = "修改用户状态", BusinessType = BusinessType.UPDATE)] + [ActionPermissionFilter(Permission = "system:user:update")] + public IActionResult ChangeStatus([FromBody] SysUser user) + { + if (user == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); } + + int result = UserService.ChangeUserStatus(user); + return ToResponse(ToJson(result)); + } + + /// + /// 删除用户 + /// + /// + /// + [HttpDelete("{userId}")] + [Log(Title = "用户管理", BusinessType = BusinessType.DELETE)] + [ActionPermissionFilter(Permission = "system:user:remove")] + public IActionResult Remove(int userid = 0) + { + if (userid <= 0) { return ToResponse(ApiResult.Error(101, "请求参数错误")); } + if (userid == 1) return ToResponse(Infrastructure.ResultCode.FAIL, "不能删除管理员账号"); + int result = UserService.DeleteUser(userid); + + return ToResponse(ToJson(result)); + } + + /// + /// 重置密码 + /// + /// + [HttpPut("resetPwd")] + [Log(Title = "重置密码", BusinessType = BusinessType.UPDATE)] + [ActionPermissionFilter(Permission = "system:user:update")] + public IActionResult ResetPwd([FromBody] SysUser sysUser) + { + //密码md5 + sysUser.Password = NETCore.Encrypt.EncryptProvider.Md5(sysUser.Password); + + int result = UserService.ResetPwd(sysUser.UserId, sysUser.Password); + return ToResponse(ToJson(result)); + } + + /// + /// 导入 + /// + /// 使用IFromFile必须使用name属性否则获取不到文件 + /// + [HttpPost("importData")] + [Log(Title = "用户导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = false)] + //[ActionPermissionFilter(Permission = "system:user:import")] + public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile) + { + IEnumerable users = ExcelHelper.ImportData(formFile.OpenReadStream()); + + //TODO 业务逻辑,自行插入数据到db + return SUCCESS(users); + } + + /// + /// 用户导入模板下载 + /// + /// + [HttpGet("importTemplate")] + [Log(Title = "用户模板", BusinessType = BusinessType.EXPORT, IsSaveRequestData = false, IsSaveResponseData = false)] + [AllowAnonymous] + public IActionResult ImportTemplateExcel() + { + List user = new List(); + MemoryStream stream = new MemoryStream(); + + string sFileName = DownloadImportTemplate(user, stream, "用户列表"); + return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"{sFileName}"); + } + + /// + /// 用户导出 + /// + /// + /// + [HttpGet("export")] + [Log(Title = "用户导出", BusinessType = BusinessType.EXPORT)] + [ActionPermissionFilter(Permission = "system:user:export")] + public IActionResult UserExport([FromQuery] SysUser user) + { + var list = UserService.SelectUserList(user, new PagerInfo(1, 10000)); + + //调试模式需要加上 + string sFileName = ExportExcel(list.Result, "user", "用户列表"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/SysUserRoleController.cs b/ARW-net/ARW.WebApi/Controllers/System/SysUserRoleController.cs new file mode 100644 index 0000000..d1d2fd1 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/SysUserRoleController.cs @@ -0,0 +1,88 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Filters; +using ARW.Model.System.Dto; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 用户角色管理 + /// + [Verify] + [Route("system/userRole")] + public class SysUserRoleController : BaseController + { + private readonly ISysUserRoleService SysUserRoleService; + private readonly ISysUserService UserService; + + public SysUserRoleController( + ISysUserRoleService sysUserRoleService, + ISysUserService userService) + { + SysUserRoleService = sysUserRoleService; + UserService = userService; + } + + /// + /// 根据角色编号获取已分配的用户 + /// + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "system:roleusers:list")] + public IActionResult GetList([FromQuery] RoleUserQueryDto roleUserQueryDto) + { + var list = SysUserRoleService.GetSysUsersByRoleId(roleUserQueryDto); + + return SUCCESS(list, TIME_FORMAT_FULL); + } + + /// + /// 添加角色用户 + /// + /// + [HttpPost("create")] + [ActionPermissionFilter(Permission = "system:roleusers:add")] + [Log(Title = "添加角色用户", BusinessType = Infrastructure.Enums.BusinessType.INSERT)] + public IActionResult Create([FromBody] RoleUsersCreateDto roleUsersCreateDto) + { + var response = SysUserRoleService.InsertRoleUser(roleUsersCreateDto); + + return SUCCESS(response); + } + + /// + /// 删除角色用户 + /// + /// + /// + [HttpPost("delete")] + [ActionPermissionFilter(Permission = "system:roleusers:remove")] + [Log(Title = "删除角色用户", BusinessType = Infrastructure.Enums.BusinessType.DELETE)] + public IActionResult Delete([FromBody] RoleUsersCreateDto roleUsersCreateDto) + { + return SUCCESS(SysUserRoleService.DeleteRoleUserByUserIds(roleUsersCreateDto.RoleId, roleUsersCreateDto.UserIds)); + } + + /// + /// 获取未分配用户角色 + /// + /// + /// + [HttpGet("GetExcludeUsers")] + public IActionResult GetExcludeUsers([FromQuery] RoleUserQueryDto roleUserQueryDto) + { + if (roleUserQueryDto.RoleId <= 0) + { + throw new CustomException(ResultCode.PARAM_ERROR, "roleId不能为空"); + } + + // 获取未添加用户 + var list = SysUserRoleService.GetExcludedSysUsersByRoleId(roleUserQueryDto); + + return SUCCESS(list, TIME_FORMAT_FULL); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/TasksController.cs b/ARW-net/ARW.WebApi/Controllers/System/TasksController.cs new file mode 100644 index 0000000..58b9993 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/TasksController.cs @@ -0,0 +1,309 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Quartz; +using SqlSugar; +using System; +using System.Threading.Tasks; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using ARW.Service.System.IService; +using ARW.Tasks; +using Snowflake.Core; +using Infrastructure.Extensions; + +namespace ARW.Admin.WebApi.Controllers +{ + /// + /// 计划任务 + /// + [Verify] + [Route("system/Tasks")] + public class TasksController : BaseController + { + private ISysTasksQzService _tasksQzService; + private ITaskSchedulerServer _schedulerServer; + + public TasksController( + ISysTasksQzService sysTasksQzService, + ITaskSchedulerServer taskScheduler) + { + _tasksQzService = sysTasksQzService; + _schedulerServer = taskScheduler; + } + + /// + /// 查询计划任务列表 + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "monitor:job:list")] + public IActionResult Query([FromQuery] TasksQueryDto parm, [FromQuery] PagerInfo pager) + { + //开始拼装查询条件 + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.QueryText), + m => m.Name.Contains(parm.QueryText) || + m.JobGroup.Contains(parm.QueryText) || + m.AssemblyName.Contains(parm.QueryText)); + + var response = _tasksQzService.GetPages(predicate.ToExpression(), pager, f => f.IsStart, OrderByType.Desc); + + return SUCCESS(response, TIME_FORMAT_FULL); + } + + /// + /// 查询单个计划任务 + /// + /// 编码 + /// + [HttpGet("get")] + public IActionResult Get(string id) + { + if (!string.IsNullOrEmpty(id)) + { + return SUCCESS(_tasksQzService.GetId(id)); + } + return SUCCESS(null); + } + + /// + /// 添加任务 + /// + /// + [HttpPost("create")] + [ActionPermissionFilter(Permission = "monitor:job:add")] + [Log(Title = "添加任务", BusinessType = BusinessType.INSERT)] + public IActionResult Create([FromBody] TasksCreateDto parm) + { + //判断是否已经存在 + if (_tasksQzService.Any(m => m.Name == parm.Name)) + { + throw new CustomException($"添加 {parm.Name} 失败,该用任务存在,不能重复!"); + } + if (!string.IsNullOrEmpty(parm.Cron) && !CronExpression.IsValidExpression(parm.Cron)) + { + throw new CustomException($"cron表达式不正确"); + } + if (string.IsNullOrEmpty(parm.ApiUrl) && parm.TaskType == 2) + { + throw new CustomException($"地址不能为空"); + } + if (parm.TaskType == 1 && (parm.AssemblyName.IsEmpty() || parm.ClassName.IsEmpty())) + { + throw new CustomException($"程序集或者类名不能为空"); + } + //从 Dto 映射到 实体 + var tasksQz = parm.Adapt().ToCreate(); + var worker = new IdWorker(1, 1); + + tasksQz.ID = (int)worker.NextId(); + tasksQz.IsStart = false; + tasksQz.Create_by = HttpContext.GetName(); + tasksQz.TaskType = parm.TaskType; + tasksQz.ApiUrl = parm.ApiUrl; + if (parm.ApiUrl.IfNotEmpty() && parm.TaskType == 2) + { + tasksQz.AssemblyName = "ARW.Tasks"; + tasksQz.ClassName = "TaskScheduler.Job_HttpRequest"; + } + return SUCCESS(_tasksQzService.Add(tasksQz)); + } + + /// + /// 更新任务 + /// + /// + [HttpPost("update")] + [ActionPermissionFilter(Permission = "monitor:job:edit")] + [Log(Title = "修改任务", BusinessType = BusinessType.UPDATE)] + public async Task Update([FromBody] TasksUpdateDto parm) + { + //判断是否已经存在 + if (_tasksQzService.Any(m => m.Name == parm.Name && m.ID.ToString().ToString() != parm.ID.ToString())) + { + throw new CustomException($"更新 {parm.Name} 失败,该用任务存在,不能重复!"); + } + if (string.IsNullOrEmpty(parm.Cron) && parm.TriggerType == 1) + { + throw new CustomException($"触发器 Corn 模式下,运行时间表达式必须填写"); + } + if (!string.IsNullOrEmpty(parm.Cron) && !CronExpression.IsValidExpression(parm.Cron)) + { + throw new CustomException($"cron表达式不正确"); + } + var tasksQz = _tasksQzService.GetFirst(m => m.ID.ToString().ToString() == parm.ID.ToString()); + if (string.IsNullOrEmpty(parm.ApiUrl) && parm.TaskType == 2) + { + throw new CustomException($"api地址不能为空"); + } + if (parm.ApiUrl.IfNotEmpty() && parm.TaskType == 2) + { + parm.AssemblyName = "ARW.Tasks"; + parm.ClassName = "TaskScheduler.Job_HttpRequest"; + } + if (tasksQz.IsStart) + { + throw new CustomException($"该任务正在运行中,请先停止在更新"); + } + + var response = _tasksQzService.Update(m => m.ID.ToString().ToString() == parm.ID.ToString(), m => new SysTasksQz + { + Name = parm.Name, + JobGroup = parm.JobGroup, + Cron = parm.Cron, + AssemblyName = parm.AssemblyName, + ClassName = parm.ClassName, + Remark = parm.Remark, + TriggerType = parm.TriggerType, + IntervalSecond = parm.IntervalSecond, + JobParams = parm.JobParams, + Update_by = HttpContextExtension.GetName(HttpContext), + Update_time = DateTime.Now, + BeginTime = parm.BeginTime, + EndTime = parm.EndTime, + TaskType = parm.TaskType, + ApiUrl = parm.ApiUrl, + }); + if (response > 0) + { + //先暂停原先的任务 + var respon = await _schedulerServer.UpdateTaskScheduleAsync(tasksQz); + } + + return SUCCESS(response); + } + + /// + /// 删除任务 + /// + /// + [HttpDelete("delete")] + [ActionPermissionFilter(Permission = "monitor:job:delete")] + [Log(Title = "删除任务", BusinessType = BusinessType.DELETE)] + public async Task Delete(string id) + { + if (string.IsNullOrEmpty(id)) + { + throw new CustomException("删除任务 Id 不能为空"); + } + + if (!_tasksQzService.Any(m => m.ID.ToString().ToString() == id)) + { + throw new CustomException("任务不存在"); + } + + var tasksQz = _tasksQzService.GetFirst(m => m.ID.ToString().ToString() == id); + var taskResult = await _schedulerServer.DeleteTaskScheduleAsync(tasksQz); + + if (taskResult.Code == 200) + { + _tasksQzService.Delete(id); + } + return ToResponse(taskResult); + } + + /// + /// 启动任务 + /// + /// + [HttpGet("start")] + [ActionPermissionFilter(Permission = "monitor:job:start")] + [Log(Title = "启动任务", BusinessType = BusinessType.OTHER)] + public async Task Start(string id) + { + if (string.IsNullOrEmpty(id)) + { + throw new CustomException("启动任务 Id 不能为空"); + } + + if (!_tasksQzService.Any(m => m.ID.ToString().ToString() == id)) + { + throw new CustomException("任务不存在"); + } + + var tasksQz = _tasksQzService.GetFirst(m => m.ID.ToString().ToString() == id); + var taskResult = await _schedulerServer.AddTaskScheduleAsync(tasksQz); + + if (taskResult.Code == 200) + { + tasksQz.IsStart = true; + _tasksQzService.Update(tasksQz); + } + + return ToResponse(taskResult); + } + + /// + /// 停止任务 + /// + /// + [HttpGet("stop")] + [ActionPermissionFilter(Permission = "monitor:job:stop")] + [Log(Title = "停止任务", BusinessType = BusinessType.OTHER)] + public async Task Stop(string id) + { + if (string.IsNullOrEmpty(id)) + { + throw new CustomException("停止任务 Id 不能为空"); + } + + if (!_tasksQzService.Any(m => m.ID.ToString() == id)) + { + throw new CustomException("任务不存在"); + } + + var tasksQz = _tasksQzService.GetFirst(m => m.ID.ToString() == id); + var taskResult = await _schedulerServer.DeleteTaskScheduleAsync(tasksQz);//await _schedulerServer.PauseTaskScheduleAsync(tasksQz); + + if (taskResult.Code == 200) + { + tasksQz.IsStart = false; + _tasksQzService.Update(tasksQz); + } + + return ToResponse(taskResult); + } + + /// + /// 定时任务立即执行一次 + /// + /// + /// + [HttpGet("run")] + [ActionPermissionFilter(Permission = "monitor:job:run")] + [Log(Title = "执行任务", BusinessType = BusinessType.OTHER)] + public async Task Run(string id) + { + if (!_tasksQzService.Any(m => m.ID.ToString() == id)) + { + throw new CustomException("任务不存在"); + } + var tasksQz = _tasksQzService.GetFirst(m => m.ID.ToString() == id); + var taskResult = await _schedulerServer.RunTaskScheduleAsync(tasksQz); + + return ToResponse(taskResult); + } + + /// + /// 定时任务导出 + /// + /// + [Log(BusinessType = BusinessType.EXPORT, IsSaveResponseData = false, Title = "定时任务导出")] + [HttpGet("export")] + [ActionPermissionFilter(Permission = "monitor:job:export")] + public IActionResult Export() + { + var list = _tasksQzService.GetAll(); + + string sFileName = ExportExcel(list, "monitorjob", "定时任务"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/TasksLogController.cs b/ARW-net/ARW.WebApi/Controllers/System/TasksLogController.cs new file mode 100644 index 0000000..fe8ea3e --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/TasksLogController.cs @@ -0,0 +1,98 @@ +using Microsoft.AspNetCore.Mvc; +using SqlSugar; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Model.System; +using Infrastructure.Extensions; +using Infrastructure.Attribute; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using Infrastructure.Enums; +using ARW.Service.System.IService; +using Infrastructure; + +namespace ARW.Admin.WebApi.Controllers.System +{ + /// + /// 任务日志 + /// + [Verify] + [Route("/monitor/jobLog")] + public class TasksLogController : BaseController + { + private readonly ISysTasksLogService tasksLogService; + + public TasksLogController(ISysTasksLogService tasksLogService) + { + this.tasksLogService = tasksLogService; + } + + /// + /// 查询日志 + /// + /// + /// + /// + [HttpGet("list")] + public IActionResult GetList([FromQuery] PagerInfo pager, [FromQuery] TasksLogQueryDto queryDto) + { + queryDto.BeginTime = DateTimeHelper.GetBeginTime(queryDto.BeginTime, -7); + queryDto.EndTime = DateTimeHelper.GetBeginTime(queryDto.EndTime, 7); + + var predicate = Expressionable.Create().And(it => it.CreateTime >= queryDto.BeginTime && it.CreateTime <= queryDto.EndTime); + predicate = predicate.AndIF(queryDto.JobName.IfNotEmpty(), m => m.JobName.Contains(queryDto.JobName)); + predicate = predicate.AndIF(queryDto.JobGroup.IfNotEmpty(), m => m.JobGroup == queryDto.JobGroup); + predicate = predicate.AndIF(queryDto.Status.IfNotEmpty(), m => m.Status == queryDto.Status); + predicate = predicate.AndIF(queryDto.JobId.IfNotEmpty(), m => m.JobId == queryDto.JobId); + + var response = tasksLogService.GetPages(predicate.ToExpression(), pager, m => m.CreateTime, OrderByType.Desc); + + return SUCCESS(response, TIME_FORMAT_FULL); + } + + /// + /// 删除定时任务调用日志 + /// + /// + /// + [HttpDelete("{jobIds}")] + [ActionPermissionFilter(Permission = "PRIV_JOBLOG_DELETE")] + [Log(Title = "删除任务日志", BusinessType = BusinessType.DELETE)] + public IActionResult Delete(string jobIds) + { + long[] jobIdArr = Tools.SpitLongArrary(jobIds); + + int result = tasksLogService.Delete(jobIdArr); + + return ToResponse(ToJson(result, result)); + } + + /// + /// 清空日志 + /// + /// + [HttpDelete("clean")] + [ActionPermissionFilter(Permission = "PRIV_JOBLOG_REMOVE")] + [Log(Title = "清空任务日志", BusinessType = BusinessType.CLEAN)] + public IActionResult Clean() + { + tasksLogService.DeleteTable(); + return SUCCESS(1); + } + + /// + /// 定时任务日志导出 + /// + /// + [Log(BusinessType = BusinessType.EXPORT, IsSaveResponseData = false, Title = "定时任务日志导出")] + [HttpGet("export")] + [ActionPermissionFilter(Permission = "PRIV_JOBLOG_EXPORT")] + public IActionResult Export() + { + var list = tasksLogService.GetAll(); + + string sFileName = ExportExcel(list, "jobLog", "定时任务日志"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/monitor/MonitorController.cs b/ARW-net/ARW.WebApi/Controllers/System/monitor/MonitorController.cs new file mode 100644 index 0000000..0b6003c --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/monitor/MonitorController.cs @@ -0,0 +1,80 @@ +using Infrastructure; +using Infrastructure.Extensions; +using Infrastructure.Model; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace ARW.Admin.WebApi.Controllers.monitor +{ + /// + /// 系统监控 + /// + public class MonitorController : BaseController + { + private OptionsSetting Options; + private IWebHostEnvironment HostEnvironment; + private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + public MonitorController(IOptions options, IWebHostEnvironment hostEnvironment) + { + this.HostEnvironment = hostEnvironment; + this.Options = options.Value; + } + + /// + /// 获取缓存监控数据 + /// + /// + [HttpGet("monitor/cache")] + public ApiResult GetCache() + { + return ToJson(1); + } + + /// + /// 获取服务器信息 + /// + /// + [HttpGet("monitor/server")] + //[AllowAnonymous] + public IActionResult Server() + { + //核心数 + int cpuNum = Environment.ProcessorCount; + string computerName = Environment.MachineName; + string osName = RuntimeInformation.OSDescription; + string osArch = RuntimeInformation.OSArchitecture.ToString(); + string version = RuntimeInformation.FrameworkDescription; + string appRAM = ((double)Process.GetCurrentProcess().WorkingSet64 / 1048576).ToString("N2") + " MB"; + string startTime = Process.GetCurrentProcess().StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + string sysRunTime = ComputerHelper.GetRunTime(); + string serverIP = Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" + Request.HttpContext.Connection.LocalPort;//获取服务器IP + + var programStartTime = Process.GetCurrentProcess().StartTime; + string programRunTime = DateTimeHelper.FormatTime((DateTime.Now - programStartTime).TotalMilliseconds.ToString().Split('.')[0].ParseToLong()); + var data = new + { + cpu = ComputerHelper.GetComputerInfo(), + disk = ComputerHelper.GetDiskInfos(), + sys = new { cpuNum, computerName, osName, osArch, serverIP, runTime = sysRunTime }, + app = new + { + name = HostEnvironment.EnvironmentName, + rootPath = HostEnvironment.ContentRootPath, + webRootPath = HostEnvironment.WebRootPath, + version, + appRAM, + startTime, + runTime = programRunTime, + host = serverIP + }, + }; + + return SUCCESS(data); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/monitor/SysLogininforController.cs b/ARW-net/ARW.WebApi/Controllers/System/monitor/SysLogininforController.cs new file mode 100644 index 0000000..e54979f --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/monitor/SysLogininforController.cs @@ -0,0 +1,99 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Microsoft.AspNetCore.Mvc; +using SqlSugar; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model; +using ARW.Model.System; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers.monitor +{ + /// + /// 系统访问记录 + /// + [Verify] + [Route("/monitor/logininfor")] + public class SysLogininforController : BaseController + { + private ISysLoginService sysLoginService; + + public SysLogininforController(ISysLoginService sysLoginService) + { + this.sysLoginService = sysLoginService; + } + + /// + /// 查询登录日志 + /// + /// + /// + /// + [HttpGet("list")] + public IActionResult LoignLogList([FromQuery] SysLogininfor sysLogininfoDto, [FromQuery] PagerInfo pagerInfo) + { + var list = sysLoginService.GetLoginLog(sysLogininfoDto, pagerInfo); + + return SUCCESS(list, TIME_FORMAT_FULL_2); + } + + /// + /// 清空登录日志 + /// + /// + [Log(Title = "清空登录日志", BusinessType= BusinessType.CLEAN)] + [ActionPermissionFilter(Permission = "monitor:logininfor:remove")] + [HttpDelete("clean")] + public IActionResult CleanLoginInfo() + { + if (!HttpContextExtension.IsAdmin(HttpContext)) + { + return ToResponse(ApiResult.Error("操作失败")); + } + sysLoginService.TruncateLogininfo(); + return SUCCESS(1); + } + + /// + /// + /// + /// + [Log(Title = "删除登录日志", BusinessType = BusinessType.DELETE)] + [HttpDelete("{infoIds}")] + [ActionPermissionFilter(Permission = "monitor:logininfor:remove")] + public IActionResult Remove(string infoIds) + { + if (!HttpContextExtension.IsAdmin(HttpContext)) + { + return ToResponse(ApiResult.Error("操作失败")); + } + long[] infoIdss = Tools.SpitLongArrary(infoIds); + return SUCCESS(sysLoginService.DeleteLogininforByIds(infoIdss)); + } + + /// + /// 登录日志导出 + /// + /// + [Log(BusinessType = BusinessType.EXPORT, IsSaveResponseData = false, Title = "登录日志导出")] + [HttpGet("export")] + [ActionPermissionFilter(Permission = "monitor:logininfor:export")] + public IActionResult Export([FromQuery] SysLogininfor logininfoDto) + { + logininfoDto.BeginTime = DateTimeHelper.GetBeginTime(logininfoDto.BeginTime, -1); + logininfoDto.EndTime = DateTimeHelper.GetBeginTime(logininfoDto.EndTime, 1); + var exp = Expressionable.Create() + .And(it => it.loginTime >= logininfoDto.BeginTime && it.loginTime <= logininfoDto.EndTime); + + var list = sysLoginService.Queryable().Where(exp.ToExpression()) + .ToList(); + + string sFileName = ExportExcel(list, "loginlog", "登录日志"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/monitor/SysOperlogController.cs b/ARW-net/ARW.WebApi/Controllers/System/monitor/SysOperlogController.cs new file mode 100644 index 0000000..ace5cc5 --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/monitor/SysOperlogController.cs @@ -0,0 +1,98 @@ +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model; +using ARW.Model.System.Dto; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Controllers.monitor +{ + /// + /// 操作日志记录 + /// + [Verify] + [Route("/monitor/operlog")] + public class SysOperlogController : BaseController + { + private ISysOperLogService sysOperLogService; + private IWebHostEnvironment WebHostEnvironment; + + public SysOperlogController(ISysOperLogService sysOperLogService, IWebHostEnvironment hostEnvironment) + { + this.sysOperLogService = sysOperLogService; + WebHostEnvironment = hostEnvironment; + } + + /// + /// 查询操作日志 + /// + /// + /// + [HttpGet("list")] + public IActionResult OperList([FromQuery] SysOperLogDto sysOperLog) + { + PagerInfo pagerInfo = new(sysOperLog.pageNum, sysOperLog.PageSize); + + sysOperLog.operName = !HttpContextExtension.IsAdmin(HttpContext) ? HttpContextExtension.GetName(HttpContext) : sysOperLog.operName; + var list = sysOperLogService.SelectOperLogList(sysOperLog, pagerInfo); + + return SUCCESS(list, "MM/dd HH:mm"); + } + + /// + /// 删除操作日志 + /// + /// + /// + [Log(Title = "操作日志", BusinessType = BusinessType.DELETE)] + [ActionPermissionFilter(Permission = "monitor:operlog:delete")] + [HttpDelete("{operIds}")] + public IActionResult Remove(string operIds) + { + if (!HttpContextExtension.IsAdmin(HttpContext)) + { + return ToResponse(ApiResult.Error("操作失败")); + } + long[] operIdss = Tools.SpitLongArrary(operIds); + return SUCCESS(sysOperLogService.DeleteOperLogByIds(operIdss)); + } + + /// + /// 清空操作日志 + /// + /// + [Log(Title = "清空操作日志", BusinessType = BusinessType.CLEAN)] + [ActionPermissionFilter(Permission = "monitor:operlog:delete")] + [HttpDelete("clean")] + public ApiResult ClearOperLog() + { + if (!HttpContextExtension.IsAdmin(HttpContext)) + { + return ApiResult.Error("操作失败"); + } + sysOperLogService.CleanOperLog(); + + return ToJson(1); + } + + /// + /// 导出操作日志 + /// + /// + [Log(Title = "操作日志", BusinessType = BusinessType.EXPORT)] + [ActionPermissionFilter(Permission = "monitor:operlog:export")] + [HttpGet("export")] + public IActionResult Export([FromQuery] SysOperLogDto sysOperLog) + { + var list = sysOperLogService.SelectOperLogList(sysOperLog, new PagerInfo(1, 10000)); + string sFileName = ExportExcel(list.Result, "operlog", "操作日志"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + + } +} diff --git a/ARW-net/ARW.WebApi/Controllers/System/monitor/SysUserOnlineController.cs b/ARW-net/ARW.WebApi/Controllers/System/monitor/SysUserOnlineController.cs new file mode 100644 index 0000000..3167c5a --- /dev/null +++ b/ARW-net/ARW.WebApi/Controllers/System/monitor/SysUserOnlineController.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Filters; + +namespace ARW.Admin.WebApi.Controllers.monitor +{ + [Verify] + [Route("monitor/online")] + public class SysUserOnlineController : BaseController + { + [HttpGet("list")] + public IActionResult Index() + { + return SUCCESS(null); + } + } +} diff --git a/ARW-net/ARW.WebApi/DataProtection/key-543fd6e3-acf6-4508-a31d-051647c3fd52.xml b/ARW-net/ARW.WebApi/DataProtection/key-543fd6e3-acf6-4508-a31d-051647c3fd52.xml new file mode 100644 index 0000000..7855b00 --- /dev/null +++ b/ARW-net/ARW.WebApi/DataProtection/key-543fd6e3-acf6-4508-a31d-051647c3fd52.xml @@ -0,0 +1,16 @@ + + + 2022-07-23T02:48:36.4342953Z + 2022-07-23T02:48:36.428528Z + 2022-10-21T02:48:36.428528Z + + + + + + + tYoNgQFFBJqcDMAQT5y3OvbJ91HQmLEBLKQleMPojBaM7yXZixyFkwwkLTHCxkbuZGXATQQ0RIpK1Zn7n+v7Tg== + + + + \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/DataProtection/key-f679b581-8cb7-4b99-8a05-222e063f101c.xml b/ARW-net/ARW.WebApi/DataProtection/key-f679b581-8cb7-4b99-8a05-222e063f101c.xml new file mode 100644 index 0000000..26a1970 --- /dev/null +++ b/ARW-net/ARW.WebApi/DataProtection/key-f679b581-8cb7-4b99-8a05-222e063f101c.xml @@ -0,0 +1,16 @@ + + + 2023-04-01T13:11:46.1028044Z + 2023-04-01T13:11:46.0724406Z + 2023-06-30T13:11:46.0724406Z + + + + + + + aEnLrpmLXxSrCM6fYsQGqAA01ZhEYGV4H74L2xnBT/rGhLNoJA5CHmfB968hkfHEHa3HeHkN3MlJjlJSEGKwWg== + + + + \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/Dockerfile b/ARW-net/ARW.WebApi/Dockerfile new file mode 100644 index 0000000..5edc338 --- /dev/null +++ b/ARW-net/ARW.WebApi/Dockerfile @@ -0,0 +1,21 @@ +FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base +#创建 /app文件夹 +WORKDIR /app +#创建挂载目录,用于将程序部署在服务器本地 +#VOLUME /app +#设置docker容器对外暴露端口 +EXPOSE 8888 +VOLUME /app/logs +#COPY bin/Release/net5.0/publish/ app/ +COPY . app/ + +#设置容器内的时区,如果不设置,默认时区是标准时间比北京时间晚8个小时 +RUN echo "Asia/shanghai" > /etc/timezone +RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime + +# 复制发布文件到工作目录 +#COPY . app/ +WORKDIR /app + +#等价于 dotnet ARW.Admin.WebApi.dll,如果不指定启动端口默认在docker里面启动端口是80端口 +ENTRYPOINT ["dotnet", "ARW.Admin.WebApi.dll", "--server.urls","http://*:8888"] \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/Extensions/DbExtension.cs b/ARW-net/ARW.WebApi/Extensions/DbExtension.cs new file mode 100644 index 0000000..cc181f0 --- /dev/null +++ b/ARW-net/ARW.WebApi/Extensions/DbExtension.cs @@ -0,0 +1,183 @@ +using Infrastructure; +using Infrastructure.Helper; +using SqlSugar; +using SqlSugar.IOC; +using System.Linq; +using System.Reflection; +using ARW.Admin.WebApi.Framework; +using ARW.Model.System; +using ARW.Model.Models.Business; +using Infrastructure.Extensions; +using System.Linq.Dynamic.Core; +using System.Linq.Expressions; +using AngleSharp.Dom; + +namespace ARW.Admin.WebApi.Extensions +{ + public static class DbExtension + { + private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + //全部数据权限 + public static string DATA_SCOPE_ALL = "1"; + //自定数据权限 + public static string DATA_SCOPE_CUSTOM = "2"; + //部门数据权限 + public static string DATA_SCOPE_DEPT = "3"; + //部门及以下数据权限 + public static string DATA_SCOPE_DEPT_AND_CHILD = "4"; + //仅本人数据权限 + public static string DATA_SCOPE_SELF = "5"; + + + + + public static void AddDb(IConfiguration Configuration) + { + string connStr = Configuration.GetConnectionString("conn_db"); + int dbType = Convert.ToInt32(Configuration.GetConnectionString("conn_db_type")); + + SugarIocServices.AddSqlSugar(new List() { + new IocConfig() { + ConfigId = "0",//默认db + ConnectionString = connStr, + DbType = (IocDbType)dbType, + IsAutoCloseConnection = true + }, + new IocConfig() { + ConfigId = "1", + ConnectionString = "替换成你的字符串", + DbType = IocDbType.MySqlConnector, + IsAutoCloseConnection = true + } + //...增加其他数据库 + }); + SugarIocServices.ConfigurationSugar(db => + { + //db0数据过滤 + FilterData(0); + + #region db0 + db.GetConnectionScope(0).Aop.OnLogExecuting = (sql, pars) => + { + var param = db.GetConnectionScope(0).Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)); + + logger.Info($"【sql语句】{sql},{param}\n"); + }; + + db.GetConnectionScope(0).Aop.OnError = (e) => + { + logger.Error(e, $"执行SQL出错:{e.Message}"); + }; + //SQL执行完 + db.GetConnectionScope(0).Aop.OnLogExecuted = (sql, pars) => + { + //执行完了可以输出SQL执行时间 (OnLogExecutedDelegate) + }; + #endregion + + #region db1 + //Db1 + db.GetConnection(1).Aop.OnLogExecuting = (sql, pars) => + { + var param = db.GetConnection(1).Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)); + + logger.Info($"【sql语句】{sql}, {param}"); + }; + //Db1错误日志 + db.GetConnection(1).Aop.OnError = (e) => + { + logger.Error($"执行Sql语句失败:{e.Sql},原因:{e.Message}"); + }; + #endregion + }); + + } + + public static void InitDb(this IServiceProvider service) + { + var db = DbScoped.SugarScope; + new MySql.Data.MySqlClient.MySqlConnection("server=localhost;Database=chat;Uid=root;Pwd=root;SslMode=none;CharSet=utf8mb4;AllowLoadLocalInfile=true;").Open(); + //db.DbMaintenance.CreateDatabase(); + //db.CodeFirst. + + var baseType = typeof(SysBase); + //var entityes = AssemblyUtils.GetAllTypes().Where(p => !p.IsAbstract && p != baseType && /*!p.IsAssignableTo(baseType)&&*/ p.GetCustomAttribute()!=null).ToArray(); + + Type[] types = Assembly + .LoadFrom("bin/Debug/net6.0/ARW.Model.dll")//如果 .dll报错,可以换成 xxx.exe 有些生成的是exe + .GetTypes().Where(it => it.FullName.Contains("Business.") && it.GetCustomAttribute() != null && it != typeof(BusinessBase))//命名空间过滤,当然你也可以写其他条件过滤 + .ToArray(); + + db.CodeFirst.SetStringDefaultLength(512).InitTables(types); + } + + /// + /// 数据过滤 + /// + /// 多库id + private static void FilterData(int configId) + { + var u = App.User; + if (u == null) return; + //获取当前用户的信息 + var user = JwtUtil.GetLoginUser(App.HttpContext); + if (user == null) return; + var db = DbScoped.SugarScope.GetConnectionScope(configId); + + // 软删除过滤 + Type[] types = Assembly + .LoadFrom("bin/Debug/net6.0/ARW.Model.dll")//如果 .dll报错,可以换成 xxx.exe 有些生成的是exe + .GetTypes().Where(it => it.FullName.Contains("Business.") && it.GetCustomAttribute() != null && it != typeof(BusinessBase))//命名空间过滤,当然你也可以写其他条件过滤 + .ToArray(); + foreach (var entityType in types) + { + //构建动态Lambda + var lambda = DynamicExpressionParser.ParseLambda + (new[] { Expression.Parameter(entityType, "it") }, + typeof(bool), $"{nameof(BusinessBase.IsDelete)} == @0", + false); + db.QueryFilter.Add(new TableFilterItem(entityType, lambda)); //将Lambda传入过滤器 + } + + //管理员不过滤 + if (user.RoleIds.Any(f => f.Equals("admin"))) return; + foreach (var role in user.Roles.OrderBy(f => f.DataScope)) + { + string dataScope = role.DataScope; + if (DATA_SCOPE_ALL.Equals(dataScope))//所有权限 + { + break; + } + else if (DATA_SCOPE_CUSTOM.Equals(dataScope))//自定数据权限 + { + //" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId())); + var filter1 = new TableFilterItem(it => SqlFunc.Subqueryable().Where(f => f.DeptId == it.DeptId && f.RoleId == role.RoleId).Any()); + db.QueryFilter.Add(filter1); + } + else if (DATA_SCOPE_DEPT.Equals(dataScope))//本部门数据 + { + var filter1 = new TableFilterItem(it => it.DeptId == user.DeptId); + db.QueryFilter.Add(filter1); + } + else if (DATA_SCOPE_DEPT_AND_CHILD.Equals(dataScope))//本部门及以下数据 + { + //SQl OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) ) + var allChildDepts = db.Queryable().ToChildList(it => it.ParentId, user.DeptId); + + var filter1 = new TableFilterItem(it => allChildDepts.Select(f => f.DeptId).ToList().Contains(it.DeptId)); + db.QueryFilter.Add(filter1); + + var filter2 = new TableFilterItem(it => allChildDepts.Select(f => f.DeptId).ToList().Contains(it.DeptId)); + db.QueryFilter.Add(filter2); + } + else if (DATA_SCOPE_SELF.Equals(dataScope))//仅本人数据 + { + var filter1 = new TableFilterItem(it => it.UserId == user.UserId, true); + db.QueryFilter.Add(filter1); + } + } + + + } + } +} diff --git a/ARW-net/ARW.WebApi/Extensions/EntityExtension.cs b/ARW-net/ARW.WebApi/Extensions/EntityExtension.cs new file mode 100644 index 0000000..aedbbb2 --- /dev/null +++ b/ARW-net/ARW.WebApi/Extensions/EntityExtension.cs @@ -0,0 +1,62 @@ +//using Microsoft.AspNetCore.Http; +//using Snowflake.Core; +using System; + +namespace ARW.Admin.WebApi.Extensions +{ + public static class EntityExtension + { + public static TSource ToCreate(this TSource source, HttpContext? context = null) + { + var types = source?.GetType(); + + if (types.GetProperty("CreateTime") != null) + { + types.GetProperty("CreateTime").SetValue(source, DateTime.Now, null); + } + if (types.GetProperty("AddTime") != null) + { + types.GetProperty("AddTime").SetValue(source, DateTime.Now, null); + } + if (types.GetProperty("UpdateTime") != null) + { + types.GetProperty("UpdateTime").SetValue(source, DateTime.Now, null); + } + if (types.GetProperty("Create_by") != null && context != null) + { + types.GetProperty("Create_by").SetValue(source, context.GetName(), null); + } + if (types.GetProperty("UserId") != null && context != null) + { + types.GetProperty("UserId").SetValue(source, context.GetUId(), null); + } + return source; + } + + public static TSource ToUpdate(this TSource source, HttpContext context = null) + { + var types = source.GetType(); + + if (types.GetProperty("UpdateTime") != null) + { + types.GetProperty("UpdateTime").SetValue(source, DateTime.Now, null); + } + if (types.GetProperty("Update_time") != null) + { + types.GetProperty("Update_time").SetValue(source, DateTime.Now, null); + } + + if (types.GetProperty("UpdateBy") != null) + { + types.GetProperty("UpdateBy").SetValue(source,context.GetName(), null); + } + if (types.GetProperty("Update_by") != null) + { + types.GetProperty("Update_by").SetValue(source, context.GetName(), null); + } + + return source; + } + + } +} diff --git a/ARW-net/ARW.WebApi/Extensions/Filters/ActionPermissionFilter.cs b/ARW-net/ARW.WebApi/Extensions/Filters/ActionPermissionFilter.cs new file mode 100644 index 0000000..af0aa86 --- /dev/null +++ b/ARW-net/ARW.WebApi/Extensions/Filters/ActionPermissionFilter.cs @@ -0,0 +1,83 @@ +using Infrastructure; +using Infrastructure.Model; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using ARW.Model.System; + +namespace ARW.Admin.WebApi.Filters +{ + /// + /// API授权判断 + /// + public class ActionPermissionFilter : ActionFilterAttribute//, IAsyncActionFilter + { + private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + + /// + /// 权限字符串,例如 system:user:view + /// + public string Permission { get; set; } + private bool HasPermi { get; set; } + private bool HasRole { get; set; } + public ActionPermissionFilter() { } + public ActionPermissionFilter(string permission) + { + Permission = permission; + HasPermi = !string.IsNullOrEmpty(Permission); + } + + /// + /// 执行Action前校验是否有权限访问 + /// + /// + /// + /// + public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) + { + LoginUser info = Framework.JwtUtil.GetLoginUser(context.HttpContext); + + if (info != null && info?.UserId > 0) + { + List perms = info.Permissions; + List rolePerms = info.RoleIds; + if (perms.Exists(f => f.Equals(GlobalConstant.AdminPerm))) + { + HasPermi = true; + } + else if (rolePerms.Exists(f => f.Equals(GlobalConstant.AdminRole))) + { + HasPermi = true; + } + else if (!string.IsNullOrEmpty(Permission)) + { + HasPermi = perms.Exists(f => f.ToLower() == Permission.ToLower()); + } + + bool isDemoMode = AppSettings.GetAppConfig("DemoMode", false); + var url = context.HttpContext.Request.Path; + //演示公开环境屏蔽权限 + string[] denyPerms = new string[] { "update", "add", "remove", "add", "edit", "delete", "import", "run", "start", "stop", "clear", "send", "export", "upload", "common" }; + if (isDemoMode && denyPerms.Any(f => Permission.ToLower().Contains(f))) + { + context.Result = new JsonResult(new { code = ResultCode.FORBIDDEN, msg = "演示模式 , 不允许操作" }); + } + if (!HasPermi && !Permission.Equals("common")) + { + logger.Info($"用户{info.UserName}没有权限访问{url},当前权限[{Permission}]"); + JsonResult result = new(new ApiResult() + { + Code = (int)ResultCode.FORBIDDEN, + Msg = $"你当前没有权限[{Permission}]访问,请联系管理员", + Data = url + }) + { + ContentType = "application/json", + }; + context.Result = result; + } + } + + return base.OnActionExecutionAsync(context, next); + } + } +} diff --git a/ARW-net/ARW.WebApi/Extensions/Filters/GlobalActionMonitor.cs b/ARW-net/ARW.WebApi/Extensions/Filters/GlobalActionMonitor.cs new file mode 100644 index 0000000..f659753 --- /dev/null +++ b/ARW-net/ARW.WebApi/Extensions/Filters/GlobalActionMonitor.cs @@ -0,0 +1,142 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Model; +using IPTools.Core; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Controllers; +using Microsoft.AspNetCore.Mvc.Filters; +using NLog; +using ARW.Admin.WebApi.Extensions; +using ARW.Model.System; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Filters +{ + public class GlobalActionMonitor : ActionFilterAttribute + { + static readonly Logger logger = LogManager.GetCurrentClassLogger(); + private ISysOperLogService OperLogService; + public GlobalActionMonitor(ISysOperLogService operLogService) + { + OperLogService = operLogService; + } + + /// + /// Action请求前 + /// + /// + /// + /// + public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) + { + ApiResult response = new(); + response.Code = (int)ResultCode.PARAM_ERROR; + + var values = context.ModelState.Values; + foreach (var item in values) + { + foreach (var err in item.Errors) + { + if (err.ErrorMessage.Contains("JSON")) + { + return next(); + } + if (!string.IsNullOrEmpty(response.Msg)) + { + response.Msg += " | "; + } + + response.Msg += err.ErrorMessage; + } + } + if (!string.IsNullOrEmpty(response.Msg)) + { + logger.Info($"请求参数错误,{response.Msg}"); + context.Result = new JsonResult(response); + } + return base.OnActionExecutionAsync(context, next); + } + + /// + /// OnActionExecuted是在Action中的代码执行之后运行的方法。 + /// + /// + public override void OnResultExecuted(ResultExecutedContext context) + { + if (context.ActionDescriptor is not ControllerActionDescriptor controllerActionDescriptor) return; + + //获得注解信息 + LogAttribute logAttribute = GetLogAttribute(controllerActionDescriptor); + if (logAttribute == null) return; + + try + { + string method = context.HttpContext.Request.Method.ToUpper(); + // 获取当前的用户 + string userName = context.HttpContext.GetName(); + string jsonResult = string.Empty; + if (context.Result is ContentResult result && result.ContentType == "application/json") + { + jsonResult = result.Content.Replace("\r\n", "").Trim(); + } + if (context.Result is JsonResult result2) + { + jsonResult = result2.Value?.ToString(); + } + //获取当前执行方法的类名 + //string className = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name; + //获取当前成员的名称 + //string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name; + string controller = context.RouteData.Values["Controller"].ToString(); + string action = context.RouteData.Values["Action"].ToString(); + + string ip = HttpContextExtension.GetClientUserIp(context.HttpContext); + var ip_info = IpTool.Search(ip); + + SysOperLog sysOperLog = new() + { + status = 0, + operName = userName, + operIp = ip, + operUrl = HttpContextExtension.GetRequestUrl(context.HttpContext), + requestMethod = method, + jsonResult = jsonResult, + operLocation = ip_info.Province + " " + ip_info.City, + method = controller + "." + action + "()", + //Elapsed = _stopwatch.ElapsedMilliseconds, + operTime = DateTime.Now + }; + HttpContextExtension.GetRequestValue(context.HttpContext, sysOperLog); + + if (logAttribute != null) + { + sysOperLog.title = logAttribute?.Title; + sysOperLog.businessType = (int)logAttribute?.BusinessType; + sysOperLog.operParam = logAttribute.IsSaveRequestData ? sysOperLog.operParam : ""; + sysOperLog.jsonResult = logAttribute.IsSaveResponseData ? sysOperLog.jsonResult : ""; + } + + LogEventInfo ei = new(NLog.LogLevel.Info, "GlobalActionMonitor", ""); + + ei.Properties["jsonResult"] = !HttpMethods.IsGet(method) ? jsonResult : ""; + ei.Properties["requestParam"] = sysOperLog.operParam; + ei.Properties["user"] = userName; + logger.Log(ei); + + OperLogService.InsertOperlog(sysOperLog); + } + catch (Exception ex) + { + logger.Error(ex, $"记录操作日志出错了#{ex.Message}"); + } + } + + private LogAttribute? GetLogAttribute(ControllerActionDescriptor controllerActionDescriptor) + { + var attribute = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true) + .FirstOrDefault(a => a.GetType().Equals(typeof(LogAttribute))); + + return attribute as LogAttribute; + } + } +} diff --git a/ARW-net/ARW.WebApi/Extensions/Filters/GlobalExceptionFilter.cs b/ARW-net/ARW.WebApi/Extensions/Filters/GlobalExceptionFilter.cs new file mode 100644 index 0000000..4e65dd0 --- /dev/null +++ b/ARW-net/ARW.WebApi/Extensions/Filters/GlobalExceptionFilter.cs @@ -0,0 +1,67 @@ +using System; +using System.Diagnostics; +using Infrastructure; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; + +namespace ARWAdmin.Filters +{ + /// + /// 全局异常捕获 + /// 暂时没用了,改为中间件 2021-2-26 + /// + public class GlobalExceptionFilter : IExceptionFilter + { + readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + + private IWebHostEnvironment _hostingEnvironment; + + public GlobalExceptionFilter(IWebHostEnvironment environment) + { + _hostingEnvironment = environment; + } + + public void OnException(ExceptionContext context) + { + Exception ex = context.Exception; + + int code = (int)ResultCode.GLOBAL_ERROR; + string msg; + //自定义异常 + if (ex is CustomException customException) + { + code = customException.Code; + msg = customException.Message; + + logger.Info($"自定义异常code={code},msg={msg}"); + } + else + //参数异常 + if (ex is ArgumentException) + { + code = (int)ResultCode.PARAM_ERROR; + msg = ex.Message; + } + else + { + msg = "服务器好像出了点问题......"; + Console.WriteLine(ex.StackTrace); + // 获取异常堆栈 + var traceFrame = new StackTrace(ex, true).GetFrame(0); + // 获取出错的文件名 + var exceptionFileName = traceFrame.GetFileName(); + // 获取出错的行号 + var exceptionFileLineNumber = traceFrame.GetFileLineNumber(); + var errorMsg = $"{ex.Message}##{traceFrame}##{exceptionFileName}##行号:{exceptionFileLineNumber}"; + + logger.Error(ex, $"系统出错了error={ex.Message}#{errorMsg}"); + //context.Response.StatusCode = 500; + } + + context.Result = new JsonResult(new { code, msg }); + context.ExceptionHandled = true; + } + + } +} \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/Extensions/Filters/VerifyAttribute.cs b/ARW-net/ARW.WebApi/Extensions/Filters/VerifyAttribute.cs new file mode 100644 index 0000000..dc5a6a2 --- /dev/null +++ b/ARW-net/ARW.WebApi/Extensions/Filters/VerifyAttribute.cs @@ -0,0 +1,56 @@ +using Infrastructure; +using Infrastructure.Model; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Controllers; +using Microsoft.AspNetCore.Mvc.Filters; +using NLog; +using System; +using System.Linq; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Framework; +using ARW.Model.System; + +namespace ARW.Admin.WebApi.Filters +{ + /// + /// 授权校验访问 + /// 如果跳过授权登录在Action 或controller加上 AllowAnonymousAttribute + /// + public class VerifyAttribute : Attribute, IAuthorizationFilter + { + static readonly Logger logger = LogManager.GetCurrentClassLogger(); + + /// + /// 只判断token是否正确,不判断权限 + /// 如果需要判断权限的在Action上加上ApiActionPermission属性标识权限类别,ActionPermissionFilter作权限处理 + /// + /// + public void OnAuthorization(AuthorizationFilterContext context) + { + var noNeedCheck = false; + if (context.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor) + { + noNeedCheck = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true) + .Any(a => a.GetType().Equals(typeof(AllowAnonymousAttribute))); + } + + if (noNeedCheck) return; + + string ip = HttpContextExtension.GetClientUserIp(context.HttpContext); + string url = context.HttpContext.Request.Path; + var isAuthed = context.HttpContext.User.Identity.IsAuthenticated; + + //使用jwt token校验2020-11-21 + LoginUser info = JwtUtil.GetLoginUser(context.HttpContext); + + if (info == null || !isAuthed) + { + string msg = $"请求访问[{url}]失败,无法访问系统资源"; + logger.Info($"{msg}"); + + context.Result = new JsonResult(new ApiResult((int)ResultCode.DENY, msg)); + } + } + } +} diff --git a/ARW-net/ARW.WebApi/Extensions/HttpContextExtension.cs b/ARW-net/ARW.WebApi/Extensions/HttpContextExtension.cs new file mode 100644 index 0000000..3641814 --- /dev/null +++ b/ARW-net/ARW.WebApi/Extensions/HttpContextExtension.cs @@ -0,0 +1,156 @@ +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Http; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Claims; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using UAParser; +using ARW.Model.System; + +namespace ARW.Admin.WebApi.Extensions +{ + /// + /// HttpContext扩展类 + /// + public static class HttpContextExtension + { + /// + /// 是否是ajax请求 + /// + /// + /// + public static bool IsAjaxRequest(this HttpRequest request) + { + if (request == null) + { + throw new ArgumentNullException(nameof(request)); + } + + //return request.Headers.ContainsKey("X-Requested-With") && + // request.Headers["X-Requested-With"].Equals("XMLHttpRequest"); + + return request.Headers["X-Requested-With"] == "XMLHttpRequest" || (request.Headers != null && request.Headers["X-Requested-With"] == "XMLHttpRequest"); + } + + /// + /// 获取客户端IP + /// + /// + /// + public static string GetClientUserIp(this HttpContext context) + { + if (context == null) return ""; + var result = context.Request.Headers["X-Forwarded-For"].FirstOrDefault(); + if (string.IsNullOrEmpty(result)) + { + result = context.Connection.RemoteIpAddress?.ToString(); + } + if (string.IsNullOrEmpty(result) || result.Contains("::1")) + result = "127.0.0.1"; + + result = result.Replace("::ffff:", "127.0.0.1"); + result = IsIP(result) ? result : "127.0.0.1"; + return result; + } + + public static bool IsIP(string ip) + { + return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"); + } + + public static long GetUId(this HttpContext context) + { + var uid = context.User.FindFirstValue(ClaimTypes.PrimarySid); + + return !string.IsNullOrEmpty(uid) ? long.Parse(uid) : 0; + } + public static string? GetName(this HttpContext context) + { + var uid = context.User?.Identity?.Name; + + return uid; + } + + public static bool IsAdmin(this HttpContext context) + { + long id = GetUId(context); + return id == 1; + } + + /// + /// ClaimsIdentity + /// + /// + /// + public static IEnumerable? GetClaims(this HttpContext context) + { + return context.User?.Identities; + } + //public static int GetRole(this HttpContext context) + //{ + // var roleid = context.User.FindFirstValue(ClaimTypes.Role) ?? "0"; + + // return int.Parse(roleid); + //} + + public static string GetUserAgent(this HttpContext context) + { + return context.Request.Headers["User-Agent"]; + } + + /// + /// 获取请求令牌 + /// + /// + /// + public static string GetToken(this HttpContext context) + { + return context.Request.Headers["Authorization"]; + } + + public static ClientInfo GetClientInfo(this HttpContext context) + { + var str = GetUserAgent(context); + var uaParser = Parser.GetDefault(); + ClientInfo c = uaParser.Parse(str); + + return c; + } + + public static string? GetRequestUrl(this HttpContext context) + { + return context != null ? context.Request.Path.Value : ""; + } + + /// + /// 设置请求参数 + /// + /// + /// + public static void GetRequestValue(this HttpContext context, SysOperLog operLog) + { + string reqMethod = operLog.requestMethod; + string param; + + if (HttpMethods.IsPost(reqMethod) || HttpMethods.IsPut(reqMethod)) + { + context.Request.Body.Seek(0, SeekOrigin.Begin); + using var reader = new StreamReader(context.Request.Body, Encoding.UTF8); + //需要使用异步方式才能获取 + param = reader.ReadToEndAsync().Result; + } + else + { + param = context.Request.QueryString.Value.ToString(); + } + operLog.operParam = param; + } + + } + +} diff --git a/ARW-net/ARW.WebApi/Extensions/IPRateExtension.cs b/ARW-net/ARW.WebApi/Extensions/IPRateExtension.cs new file mode 100644 index 0000000..c055f24 --- /dev/null +++ b/ARW-net/ARW.WebApi/Extensions/IPRateExtension.cs @@ -0,0 +1,27 @@ +using AspNetCoreRateLimit; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace ARW.Admin.WebApi.Extensions +{ + public static class IPRateExtension + { + public static void AddIPRate(this IServiceCollection services, IConfiguration configuration) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + //从appsettings.json中加载常规配置,IpRateLimiting与配置文件中节点对应 + services.Configure(configuration.GetSection("IpRateLimiting")); + + //从appsettings.json中加载Ip规则 + services.Configure(configuration.GetSection("IpRateLimitPolicies")); + //注入计数器和规则存储 + services.AddSingleton(); + services.AddSingleton(); + //配置(解析器、计数器密钥生成器) + services.AddSingleton(); + services.AddSingleton(); + } + } +} diff --git a/ARW-net/ARW.WebApi/Extensions/SwaggerExtension.cs b/ARW-net/ARW.WebApi/Extensions/SwaggerExtension.cs new file mode 100644 index 0000000..942da1f --- /dev/null +++ b/ARW-net/ARW.WebApi/Extensions/SwaggerExtension.cs @@ -0,0 +1,100 @@ +using Infrastructure; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.Filters; +using Swashbuckle.AspNetCore.SwaggerUI; + +namespace ARW.Admin.WebApi.Extensions +{ + public static class SwaggerExtension + { + /// + /// + /// + /// + public static void UseSwagger(this IApplicationBuilder app) + { + app.UseSwagger(c => + { + c.RouteTemplate = "swagger/{documentName}/swagger.json"; + c.PreSerializeFilters.Add((swaggerDoc, httpReq) => + { + var url = $"{httpReq.Scheme}://{httpReq.Host.Value}"; + var referer = httpReq.Headers["Referer"].ToString(); + if (referer.Contains(GlobalConstant.DevApiProxy)) + url = referer.Substring(0, + referer.IndexOf(GlobalConstant.DevApiProxy, StringComparison.InvariantCulture) + GlobalConstant.DevApiProxy.Length - 1); + swaggerDoc.Servers = + new List + { + new OpenApiServer + { + Url = url + } + }; + }); + }); + app.UseSwaggerUI(c => + { + c.SwaggerEndpoint("v1/swagger.json", "ARWAdmin v1"); + c.DocExpansion(DocExpansion.None); + } + ); + } + + public static void AddSwaggerConfig(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + //IWebHostEnvironment hostEnvironment = App.GetRequiredService(); + + services.AddSwaggerGen(c => + { + c.SwaggerDoc("v1", new OpenApiInfo + { + Title = "ARW 接口文档", + Version = "v1", + Description = "", + }); + try + { + //添加文档注释 + c.IncludeXmlComments("ARW.WebApi.xml", true); + } + catch (Exception ex) + { + Console.WriteLine("swagger 文档加载失败" + ex.Message); + } + + //参考文章:http://www.zyiz.net/tech/detail-134965.html + //需要安装包Swashbuckle.AspNetCore.Filters + // 开启权限小锁 需要在对应的Action上添加[Authorize]才能看到 + c.OperationFilter(); + c.OperationFilter(); + + //在header 中添加token,传递到后台 + c.OperationFilter(); + + c.AddSecurityDefinition(JwtBearerDefaults.AuthenticationScheme, + new OpenApiSecurityScheme + { + In = ParameterLocation.Header, + Description = "请输入Login接口返回的Token,前置Bearer。示例:Bearer {Token}", + Name = "Authorization",//jwt默认的参数名称, + Type = SecuritySchemeType.ApiKey, //指定ApiKey + BearerFormat = "JWT",//标识承载令牌的格式 该信息主要是出于文档目的 + Scheme = JwtBearerDefaults.AuthenticationScheme//授权中要使用的HTTP授权方案的名称 + }); + c.AddSecurityRequirement(new OpenApiSecurityRequirement + { + { + new OpenApiSecurityScheme + { + Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } + }, + new List() + } + }); + }); + } + } +} diff --git a/ARW-net/ARW.WebApi/Extensions/TasksExtension.cs b/ARW-net/ARW.WebApi/Extensions/TasksExtension.cs new file mode 100644 index 0000000..ca0078e --- /dev/null +++ b/ARW-net/ARW.WebApi/Extensions/TasksExtension.cs @@ -0,0 +1,57 @@ +using Infrastructure; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Quartz.Spi; +using System; +using System.Threading.Tasks; +using ARW.Service.System.IService; +using ARW.Tasks; + +namespace ARW.Admin.WebApi.Extensions +{ + /// + /// 定时任务扩展方法 + /// + public static class TasksExtension + { + public static void AddTaskSchedulers(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + //添加Quartz服务 + services.AddSingleton(); + //添加我们的服务 + //services.AddTransient(); + + services.AddTransient(); + } + + /// + /// 程序启动后添加任务计划 + /// + /// + /// + public static IApplicationBuilder UseAddTaskSchedulers(this IApplicationBuilder app) + { + //var _tasksQzService = (ISysTasksQzService)App.GetRequiredService(typeof(ISysTasksQzService)); + + ITaskSchedulerServer _schedulerServer = app.ApplicationServices.GetRequiredService(); + + //var tasks = _tasksQzService.GetList(m => m.IsStart); + var tasks = SqlSugar.IOC.DbScoped.SugarScope.Queryable().Where(m => m.IsStart).ToList(); + + //程序启动后注册所有定时任务 + foreach (var task in tasks) + { + var result = _schedulerServer.AddTaskScheduleAsync(task); + if (result.Result.Code == 200) + { + Console.WriteLine($"注册任务[{task.Name}]ID:{task.ID}成功"); + } + } + + return app; + } + + } +} diff --git a/ARW-net/ARW.WebApi/Framework/CookieUtil.cs b/ARW-net/ARW.WebApi/Framework/CookieUtil.cs new file mode 100644 index 0000000..2c42662 --- /dev/null +++ b/ARW-net/ARW.WebApi/Framework/CookieUtil.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Http; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; + +namespace ARW.Admin.WebApi.Framework +{ + public class CookieUtil + { + public static void WhiteCookie(HttpContext context, List claims) + { + //2.创建声明主题 指定认证方式 这里使用cookie + var claimsIdentity = new ClaimsIdentity(claims, "Login"); + + Task.Run(async () => + { + await context.SignInAsync( + JwtBearerDefaults.AuthenticationScheme,//这里要注意的是HttpContext.SignInAsync(AuthenticationType,…) 所设置的Scheme一定要与前面的配置一样,这样对应的登录授权才会生效。 + new ClaimsPrincipal(claimsIdentity), + new AuthenticationProperties() + { + IsPersistent = true, + AllowRefresh = true, + ExpiresUtc = DateTimeOffset.Now.AddDays(1),//有效时间 + }); + }).Wait(); + } + } +} diff --git a/ARW-net/ARW.WebApi/Framework/JsonConverterUtil.cs b/ARW-net/ARW.WebApi/Framework/JsonConverterUtil.cs new file mode 100644 index 0000000..b199178 --- /dev/null +++ b/ARW-net/ARW.WebApi/Framework/JsonConverterUtil.cs @@ -0,0 +1,37 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace ARW.Admin.WebApi.Framework +{ + public class JsonConverterUtil + { + public class DateTimeNullConverter : JsonConverter + { + public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + => string.IsNullOrEmpty(reader.GetString()) ? default(DateTime?) : ParseDateTime(reader.GetString()); + + public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options) + => writer.WriteStringValue(value?.ToString("yyyy-MM-dd HH:mm:ss")); + } + + public class DateTimeConverter : JsonConverter + { + public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var dateTime = ParseDateTime(reader.GetString()); + return dateTime == null ? DateTime.MinValue : dateTime.Value; + } + + public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) + => writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss")); + } + + public static DateTime? ParseDateTime(string dateStr) + { + if (System.Text.RegularExpressions.Regex.IsMatch(dateStr, @"^\d{4}[/-]") && DateTime.TryParse(dateStr, null,System.Globalization.DateTimeStyles.AssumeLocal, out var dateVal)) + return dateVal; + return null; + } + } +} diff --git a/ARW-net/ARW.WebApi/Framework/JwtUtil.cs b/ARW-net/ARW.WebApi/Framework/JwtUtil.cs new file mode 100644 index 0000000..5d69961 --- /dev/null +++ b/ARW-net/ARW.WebApi/Framework/JwtUtil.cs @@ -0,0 +1,168 @@ +using Infrastructure; +using Infrastructure.Extensions; +using Microsoft.IdentityModel.Tokens; +using Newtonsoft.Json; +using System.IdentityModel.Tokens.Jwt; +using System.Security.Claims; +using System.Text; +using ARW.Admin.WebApi.Extensions; +using ARW.Model.System; +using ARW.Service.System; + +namespace ARW.Admin.WebApi.Framework +{ + /// + /// 2020-11-20 + /// + public class JwtUtil + { + /// + /// 获取用户身份信息 + /// + /// + /// + public static LoginUser GetLoginUser(HttpContext httpContext) + { + string token = httpContext.GetToken(); + + if (!string.IsNullOrEmpty(token)) + { + return ValidateJwtToken(ParseToken(token)); + } + return null; + } + + /// + /// 生成token + /// + /// + /// + /// + public static string GenerateJwtToken(List claims, JwtSettings jwtSettings) + { + var authTime = DateTime.Now; + var expiresAt = authTime.AddMinutes(jwtSettings.Expire); + var tokenHandler = new JwtSecurityTokenHandler(); + var key = Encoding.ASCII.GetBytes(jwtSettings.SecretKey); + claims.Add(new Claim("Audience", jwtSettings.Audience)); + claims.Add(new Claim("Issuer", jwtSettings.Issuer)); + + var tokenDescriptor = new SecurityTokenDescriptor + { + Subject = new ClaimsIdentity(claims), + Issuer = jwtSettings.Issuer, + Audience = jwtSettings.Audience, + IssuedAt = authTime,//token生成时间 + Expires = expiresAt, + //NotBefore = authTime, + TokenType = "Bearer", + //对称秘钥,签名证书 + SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) + }; + var token = tokenHandler.CreateToken(tokenDescriptor); + return tokenHandler.WriteToken(token); + } + /// + /// 验证Token + /// + /// + public static TokenValidationParameters ValidParameters() + { + JwtSettings jwtSettings = new(); + AppSettings.Bind("JwtSettings", jwtSettings); + + if (jwtSettings == null || jwtSettings.SecretKey.IsEmpty()) + { + throw new Exception("JwtSettings获取失败"); + } + var key = Encoding.ASCII.GetBytes(jwtSettings.SecretKey); + + var tokenDescriptor = new TokenValidationParameters + { + ValidateIssuerSigningKey = true, + ValidateIssuer = true, + ValidateAudience = true, + ValidIssuer = jwtSettings.Issuer, + ValidAudience = jwtSettings.Audience, + IssuerSigningKey = new SymmetricSecurityKey(key), + ValidateLifetime = true,//是否验证Token有效期,使用当前时间与Token的Claims中的NotBefore和Expires对比 + ClockSkew = TimeSpan.FromSeconds(30) + //RequireExpirationTime = true,//过期时间 + }; + return tokenDescriptor; + } + /// + /// 从令牌中获取数据声明 + /// + /// 令牌 + /// + public static IEnumerable? ParseToken(string token) + { + var tokenHandler = new JwtSecurityTokenHandler(); + var validateParameter = ValidParameters(); + token = token.Replace("Bearer ", ""); + try + { + tokenHandler.ValidateToken(token, validateParameter, out SecurityToken validatedToken); + + var jwtToken = tokenHandler.ReadJwtToken(token); + return jwtToken.Claims; + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + // return null if validation fails + return null; + } + } + + /// + /// jwt token校验 + /// + /// + /// + public static LoginUser? ValidateJwtToken(IEnumerable jwtToken) + { + try + { + var userData = jwtToken.FirstOrDefault(x => x.Type == ClaimTypes.UserData).Value; + var loginUser = JsonConvert.DeserializeObject(userData); + var permissions = CacheService.GetUserPerms(GlobalConstant.UserPermKEY + loginUser?.UserId); + if (loginUser?.UserName == "admin") + { + permissions = new List() { GlobalConstant.AdminPerm }; + } + if (permissions == null) return null; + loginUser.Permissions = permissions; + return loginUser; + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + return null; + } + } + + /// + ///组装Claims + /// + /// + /// + public static List AddClaims(LoginUser user) + { + if (user?.Permissions.Count > 50) + { + user.Permissions = new List(); + } + var claims = new List() + { + new Claim(ClaimTypes.PrimarySid, user.UserId.ToString()), + new Claim(ClaimTypes.Name, user.UserName), + new Claim(ClaimTypes.UserData, JsonConvert.SerializeObject(user)) + }; + + return claims; + } + + } +} diff --git a/ARW-net/ARW.WebApi/Hubs/ChatHub.cs b/ARW-net/ARW.WebApi/Hubs/ChatHub.cs new file mode 100644 index 0000000..39b27f9 --- /dev/null +++ b/ARW-net/ARW.WebApi/Hubs/ChatHub.cs @@ -0,0 +1,178 @@ +using Infrastructure; +using Infrastructure.Constant; +using Infrastructure.Model; +using IPTools.Core; +using Microsoft.AspNetCore.SignalR; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Http; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Framework; +using ARW.Model; +using ARW.Model.System; +using ARW.Service.System.IService; +using JinianNet.JNTemplate; +using Microsoft.AspNetCore.Http; +using RestSharp; +using System.Net; +using ARW.Service.Business.IBusinessService.Chat; +using ARW.Model.Models.Business.Chat; +using Infrastructure.Extensions; +using ARW.Repository.Business.Chat; + +namespace ARW.Admin.WebApi.Hubs +{ + /// + /// 聊天室SignalR + /// + public class ChatHub : Hub + { + private static readonly List clientusers = new(); + private readonly IChatLoginService _ChatLoginService; + private readonly IGroupUserService _GroupUserService; + + public ChatHub(IChatLoginService chatLoginService, IGroupUserService groupUserService) + { + this._ChatLoginService = chatLoginService; + _GroupUserService = groupUserService; + } + + private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + + //private ApiResult SendNotice() + //{ + // var result = SysNoticeService.GetSysNotices(); + + // return new ApiResult(200, "success", result); + //} + + #region 客户端连接 + + /// + /// 客户端连接的时候调用 + /// + /// + public override Task OnConnectedAsync() + { + var httpContext = Context.GetHttpContext(); + var username = httpContext.Request.Cookies["username"]; + if (username == null) + { + throw new Exception("系统异常连接失败"); + } + var userInfo = _ChatLoginService.FindUserByName(username); + + _ChatLoginService.Update(s => s.ChatUserName == username, + f => new ChatUser + { + Status = 1 + }); + + var user = clientusers.Any(u => u.ConnectionId == Context.ConnectionId); + ////判断用户是否存在,否则添加集合 + if (user == false) + { + OnlineUsersForChat users = new(Context.ConnectionId, userInfo.ChatUserName, userInfo.ChatUserGuId) + { + }; + + clientusers.Add(users); + } + + foreach (var item in clientusers) + { + Console.WriteLine(item); + } + + //Clients.All.SendAsync(HubsConstant.OnlineNum, clientUsers.Count); + Clients.All.SendAsync("onlineChatUser", clientusers); + return base.OnConnectedAsync(); + } + + /// + /// 连接终止时调用。 + /// + /// + public override Task OnDisconnectedAsync(Exception? exception) + { + var httpContext = Context.GetHttpContext(); + var username = httpContext.Request.Cookies["username"]; + + if (username == null) + { + throw new Exception("系统异常连接失败"); + } + + // 修改用户登录状态 + _ChatLoginService.Update(s => s.ChatUserName == username, + f => new ChatUser + { + Status = 0 + }); + + var user = clientusers.Where(p => p.ConnectionId == Context.ConnectionId).FirstOrDefault(); + ////判断用户是否存在,否则添加集合 + if (user != null) + { + clientusers.Remove(user); + } + return base.OnDisconnectedAsync(exception); + } + + #endregion + + /// + /// 好友发送信息 + /// + /// + /// + /// + public async Task SendFriendsChat(string selfConnectionId, string connectId, string sender, string receiver, string message) + { + if (string.IsNullOrEmpty(connectId)) + { + throw new CustomException("好友不在线,请留言!"); + } + + // 服务端主动调用客户端的方法 + // 向指定用户(connectId)发送指定消息 + // 监听接受方法("ReceiveMessage")来获取消息 -> ( new { sender, receiver, message } ) + await Clients.Client(connectId).SendAsync("ReceiveMessage", new { sender, receiver, message }); + await Clients.Client(selfConnectionId).SendAsync("ReceiveMessage", new { sender, receiver, message }); + } + + + /// + /// 进入指定组 + /// + /// + /// 组的名称 + [HubMethodName(nameof(EnterRoom))] + public void EnterRoom(string connectId, string roomName) + { + Groups.AddToGroupAsync(connectId, roomName); + } + + /// + /// 群聊天(发送信息) + /// + /// + public async Task SendGroupChat(string roomName, string groupGuId, string selfConnectionId, string senderId, string receiver, string message) + { + var guid = senderId.ParseToLong(); + var groupguid = groupGuId.ParseToLong(); + var sender = _ChatLoginService.FindUserByGuid(guid).Result; + + await Clients.Group(roomName) + .SendAsync("groupMessages", new { roomName, sender, receiver, message }); + + _GroupUserService.Update(s => s.GroupGuId == groupguid, + f => new GroupUser + { + IsRead = false + }); + + //await Clients.Client(selfConnectionId).SendAsync("groupMessages", new { sender, receiver, message }); + } + + } +} diff --git a/ARW-net/ARW.WebApi/Hubs/MessageHub.cs b/ARW-net/ARW.WebApi/Hubs/MessageHub.cs new file mode 100644 index 0000000..c89dd65 --- /dev/null +++ b/ARW-net/ARW.WebApi/Hubs/MessageHub.cs @@ -0,0 +1,127 @@ +using Infrastructure; +using Infrastructure.Constant; +using Infrastructure.Model; +using IPTools.Core; +using Microsoft.AspNetCore.SignalR; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Framework; +using ARW.Model; +using ARW.Model.System; +using ARW.Service.System.IService; +using Quartz.Util; +using Microsoft.AspNetCore.Http; + +namespace ARW.Admin.WebApi.Hubs +{ + /// + /// + /// + public class MessageHub : Hub + { + //创建用户集合,用于存储所有链接的用户数据 + private static readonly List clientUsers = new(); + private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + private readonly ISysNoticeService SysNoticeService; + + /// + /// + /// + /// + public MessageHub(ISysNoticeService noticeService) + { + SysNoticeService = noticeService; + } + + private ApiResult SendNotice() + { + var result = SysNoticeService.GetSysNotices(); + + return new ApiResult(200, "success", result); + } + + #region 客户端连接 + + /// + /// 客户端连接的时候调用 + /// + /// + public override Task OnConnectedAsync() + { + var name = Context.User.Identity.Name; + var ip = HttpContextExtension.GetClientUserIp(App.HttpContext); + var ip_info = IpTool.Search(ip); + + LoginUser loginUser = JwtUtil.GetLoginUser(App.HttpContext); + var user = clientUsers.Any(u => u.ConnnectionId == Context.ConnectionId); + //判断用户是否存在,否则添加集合 + if (!user && Context.User.Identity.IsAuthenticated) + { + OnlineUsers users = new(Context.ConnectionId, name, loginUser?.UserId, ip) + { + Location = ip_info.City + }; + clientUsers.Add(users); + Console.WriteLine($"{DateTime.Now}:{name},{Context.ConnectionId}连接服务端success,当前已连接{clientUsers.Count}个"); + //Clients.All.SendAsync("welcome", $"欢迎您:{name},当前时间:{DateTime.Now}"); + Clients.All.SendAsync(HubsConstant.MoreNotice, SendNotice()); + } + + Clients.All.SendAsync(HubsConstant.OnlineNum, clientUsers.Count); + Clients.All.SendAsync(HubsConstant.OnlineUser, clientUsers); + return base.OnConnectedAsync(); + } + + /// + /// 连接终止时调用。 + /// + /// + public override Task OnDisconnectedAsync(Exception? exception) + { + var user = clientUsers.Where(p => p.ConnnectionId == Context.ConnectionId).FirstOrDefault(); + //判断用户是否存在,否则添加集合 + if (user != null) + { + clientUsers.Remove(user); + Clients.All.SendAsync(HubsConstant.OnlineNum, clientUsers.Count); + Clients.All.SendAsync(HubsConstant.OnlineUser, clientUsers); + Console.WriteLine($"用户{user?.Name}离开了,当前已连接{clientUsers.Count}个"); + } + return base.OnDisconnectedAsync(exception); + } + + #endregion + + /// + /// 注册信息 + /// + /// + /// + /// + /// + [HubMethodName("SendMessage")] + public async Task SendMessage(string connectId, string userName, string message) + { + Console.WriteLine($"{connectId},message={message}"); + bool isDemoMode = AppSettings.GetAppConfig("DemoMode", true); + if (isDemoMode) + { + await Clients.Caller.SendAsync("receiveChat", new { userName, message = "当前环境为演示环境,消息不会发送给对方" }); + return; + } + await Clients.Client(connectId).SendAsync("receiveChat", new { userName, message }); + } + + + /// + /// 发送消息 + /// + /// + /// + /// + public async Task SendChat(string user, string message) + { + // 服务端主动调用客户端的方法 + await Clients.All.SendAsync("ReceiveMessage", new { user, message }); + } + } +} diff --git a/ARW-net/ARW.WebApi/Hubs/OnlineUsers.cs b/ARW-net/ARW.WebApi/Hubs/OnlineUsers.cs new file mode 100644 index 0000000..61858e0 --- /dev/null +++ b/ARW-net/ARW.WebApi/Hubs/OnlineUsers.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Admin.WebApi.Hubs +{ + public class OnlineUsers + { + /// + /// 客户端连接Id + /// + public string ConnnectionId { get; set; } + /// + /// 用户id + /// + public long? Userid { get; set; } + public string Name { get; set; } + public DateTime LoginTime { get; set; } + public string UserIP { get; set; } + public string Location { get; set; } + + public OnlineUsers(string clientid, string name, long? userid, string userip) + { + ConnnectionId = clientid; + Name = name; + LoginTime = DateTime.Now; + Userid = userid; + UserIP = userip; + } + } +} diff --git a/ARW-net/ARW.WebApi/Hubs/OnlineUsersForChat.cs b/ARW-net/ARW.WebApi/Hubs/OnlineUsersForChat.cs new file mode 100644 index 0000000..9294eb8 --- /dev/null +++ b/ARW-net/ARW.WebApi/Hubs/OnlineUsersForChat.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ARW.Admin.WebApi.Hubs +{ + /// + /// 在线用户(聊天室) + /// + public class OnlineUsersForChat + { + /// + /// 客户端连接Id + /// + public string ConnectionId { get; set; } + /// + /// 用户id + /// + public long? UserGuid { get; set; } + public string Name { get; set; } + public DateTime LoginTime { get; set; } + + public OnlineUsersForChat(string clientid, string name, long? userguid) + { + ConnectionId = clientid; + Name = name; + LoginTime = DateTime.Now; + UserGuid = userguid; + } + } +} diff --git a/ARW-net/ARW.WebApi/Middleware/GlobalExceptionMiddleware.cs b/ARW-net/ARW.WebApi/Middleware/GlobalExceptionMiddleware.cs new file mode 100644 index 0000000..f64e6b0 --- /dev/null +++ b/ARW-net/ARW.WebApi/Middleware/GlobalExceptionMiddleware.cs @@ -0,0 +1,136 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Model; +using IPTools.Core; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Features; +using NLog; +using System; +using System.Text.Encodings.Web; +using System.Text.Json; +using System.Threading.Tasks; +using ARW.Admin.WebApi.Extensions; +using ARW.Model.System; +using ARW.Service.System.IService; + +namespace ARW.Admin.WebApi.Middleware +{ + /// + /// 全局异常处理中间件 + /// + // 调用 app.UseMiddleware() + public class GlobalExceptionMiddleware + { + private readonly RequestDelegate next; + private readonly ISysOperLogService SysOperLogService; + + static readonly Logger Logger = LogManager.GetCurrentClassLogger();//声明NLog变量 + + public GlobalExceptionMiddleware(RequestDelegate next, ISysOperLogService sysOperLog) + { + this.next = next; + this.SysOperLogService = sysOperLog; + } + + public async Task Invoke(HttpContext context) + { + try + { + await next(context); + } + catch (Exception ex) + { + await HandleExceptionAsync(context, ex); + } + } + + private async Task HandleExceptionAsync(HttpContext context, Exception ex) + { + NLog.LogLevel logLevel = NLog.LogLevel.Info; + int code = (int)ResultCode.GLOBAL_ERROR; + string msg; + string error = string.Empty; + //自定义异常 + if (ex is CustomException customException) + { + code = customException.Code; + msg = customException.Message; + error = customException.LogMsg; + } + else if (ex is ArgumentException)//参数异常 + { + code = (int)ResultCode.PARAM_ERROR; + msg = ex.Message; + } + else + { + msg = "服务器好像出了点问题......"; + error = $"{ex.Message}"; + logLevel = NLog.LogLevel.Error; + context.Response.StatusCode = 500; + } + var options = new JsonSerializerOptions + { + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + WriteIndented = true + }; + + ApiResult apiResult = new(code, msg); + string responseResult = JsonSerializer.Serialize(apiResult, options).ToLower(); + string ip = HttpContextExtension.GetClientUserIp(context); + var ip_info = IpTool.Search(ip); + + SysOperLog sysOperLog = new() + { + status = 1, + operIp = ip, + operUrl = HttpContextExtension.GetRequestUrl(context), + requestMethod = context.Request.Method, + jsonResult = responseResult, + errorMsg = string.IsNullOrEmpty(error) ? msg : error, + operName = HttpContextExtension.GetName(context) , + operLocation = ip_info.Province + " " + ip_info.City, + operTime = DateTime.Now + }; + HttpContextExtension.GetRequestValue(context, sysOperLog); + var endpoint = GetEndpoint(context); + if (endpoint != null) + { + var logAttribute = endpoint.Metadata.GetMetadata(); + if (logAttribute != null) + { + sysOperLog.businessType = (int)logAttribute?.BusinessType; + sysOperLog.title = logAttribute?.Title; + sysOperLog.operParam = logAttribute.IsSaveRequestData ? sysOperLog.operParam : ""; + sysOperLog.jsonResult = logAttribute.IsSaveResponseData ? sysOperLog.jsonResult : ""; + } + } + LogEventInfo ei = new(logLevel, "GlobalExceptionMiddleware", error) + { + Exception = ex, + Message = error + }; + ei.Properties["status"] = 1;//走正常返回都是通过走GlobalExceptionFilter不通过 + ei.Properties["jsonResult"] = responseResult; + ei.Properties["requestParam"] = sysOperLog.operParam; + ei.Properties["user"] = HttpContextExtension.GetName(context); + + Logger.Log(ei); + context.Response.ContentType = "text/json;charset=utf-8"; + await context.Response.WriteAsync(responseResult, System.Text.Encoding.UTF8); + + SysOperLogService.InsertOperlog(sysOperLog); + } + + public static Endpoint GetEndpoint(HttpContext context) + { + if (context == null) + { + throw new ArgumentNullException(nameof(context)); + } + + return context.Features.Get()?.Endpoint; + } + } +} diff --git a/ARW-net/ARW.WebApi/NLog.config b/ARW-net/ARW.WebApi/NLog.config new file mode 100644 index 0000000..2258b34 --- /dev/null +++ b/ARW-net/ARW.WebApi/NLog.config @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARW-net/ARW.WebApi/Program.cs b/ARW-net/ARW.WebApi/Program.cs new file mode 100644 index 0000000..53fd1c5 --- /dev/null +++ b/ARW-net/ARW.WebApi/Program.cs @@ -0,0 +1,149 @@ +using Infrastructure; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.DataProtection; +using ARW.Admin.WebApi.Framework; +using Hei.Captcha; +using Infrastructure.Extensions; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Admin.WebApi.Middleware; +using ARW.Admin.WebApi.Hubs; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. + +builder.Services.AddDistributedMemoryCache();//启用内存缓存 +builder.Services.AddSession(options => +{ + options.IdleTimeout = TimeSpan.FromMinutes(5);//设置session过期时间 + options.Cookie.IsEssential = true; +}); + + +builder.Services.AddControllers().AddNewtonsoftJson(opt => +{ + //忽略循环引用 + opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; + + //不改变字段大小 + opt.SerializerSettings.ContractResolver = new DefaultContractResolver(); +}); +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); +//注入HttpContextAccessor +builder.Services.AddSingleton(); + +//配置跨域 +builder.Services.AddCors(c => +{ + c.AddPolicy("Policy", policy => + { + policy.WithOrigins(builder.Configuration["corsUrls"].Split(',', StringSplitOptions.RemoveEmptyEntries)) + .AllowAnyHeader()//允许任意头 + .AllowCredentials()//允许cookie + .AllowAnyMethod();//允许任意方法 + }); +}); + +//注入SignalR实时通讯,默认用json传输 +builder.Services.AddSignalR(); +//消除Error unprotecting the session cookie警告 +builder.Services.AddDataProtection() + .PersistKeysToFileSystem(new DirectoryInfo(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "DataProtection")); +//普通验证码 +builder.Services.AddHeiCaptcha(); +//builder.Services.AddSession(); +builder.Services.AddHttpContextAccessor(); +//绑定整个对象到Model上 +builder.Services.Configure(builder.Configuration); + +//jwt 认证 +builder.Services.AddAuthentication(options => +{ + options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; + options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; +}).AddCookie() +.AddJwtBearer(o => +{ + o.TokenValidationParameters = JwtUtil.ValidParameters(); +}); + +//InternalApp.InternalServices = builder.Services; +builder.Services.AddAppService(); +builder.Services.AddSingleton(new AppSettings(builder.Configuration)); +//开启计划任务 +builder.Services.AddTaskSchedulers(); +//初始化db +DbExtension.AddDb(builder.Configuration); + +//注册REDIS 服务 +Task.Run(() => +{ + //RedisServer.Initalize(); +}); +builder.Services.AddMvc(options => +{ + options.Filters.Add(typeof(GlobalActionMonitor));//全局注册 +}) +.AddJsonOptions(options => +{ + options.JsonSerializerOptions.Converters.Add(new JsonConverterUtil.DateTimeConverter()); + options.JsonSerializerOptions.Converters.Add(new JsonConverterUtil.DateTimeNullConverter()); +}); + +builder.Services.AddSwaggerConfig(); + +var app = builder.Build(); +if (builder.Configuration["InitDb"].ParseToBool() == true) +{ + InternalApp.ServiceProvider = app.Services; + app.Services.InitDb(); +} + +app.UseSession(); +app.UseSwagger(); + +//使可以多次多去body内容 +app.Use((context, next) => +{ + context.Request.EnableBuffering(); + if (context.Request.Query.TryGetValue("access_token", out var token)) + { + context.Request.Headers.Add("Authorization", $"Bearer {token}"); + } + return next(); +}); +//开启访问静态文件/wwwroot目录文件,要放在UseRouting前面 +app.UseStaticFiles(); +//开启路由访问 +app.UseRouting(); +app.UseCors("Policy");//要放在app.UseEndpoints前。 +//app.UseHttpsRedirection(); + +app.UseAuthentication(); +app.UseAuthorization(); + +//开启缓存 +app.UseResponseCaching(); +//恢复/启动任务 +app.UseAddTaskSchedulers(); +//使用全局异常中间件 +app.UseMiddleware(); + +app.UseEndpoints(endpoints => +{ + //设置socket连接 + endpoints.MapHub("/msgHub"); + endpoints.MapHub("/chatHub"); + + endpoints.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); +}); +app.MapControllers(); + +app.Run(); \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/Properties/PublishProfiles/FolderProfile.pubxml b/ARW-net/ARW.WebApi/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..5dc798d --- /dev/null +++ b/ARW-net/ARW.WebApi/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,20 @@ + + + + + true + false + true + Release + Any CPU + FileSystem + bin\Release\net6.0\publish\ + FileSystem + + net6.0 + e5497bb4-b0c1-4794-9fae-163f626ec399 + false + + \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/Properties/PublishProfiles/FolderProfile1.pubxml b/ARW-net/ARW.WebApi/Properties/PublishProfiles/FolderProfile1.pubxml new file mode 100644 index 0000000..d0d2ce9 --- /dev/null +++ b/ARW-net/ARW.WebApi/Properties/PublishProfiles/FolderProfile1.pubxml @@ -0,0 +1,16 @@ + + + + + False + False + True + Release + Any CPU + FileSystem + bin\Release\net6.0\publish\ + FileSystem + + \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/Properties/PublishProfiles/FolderProfile2.pubxml b/ARW-net/ARW.WebApi/Properties/PublishProfiles/FolderProfile2.pubxml new file mode 100644 index 0000000..d0d2ce9 --- /dev/null +++ b/ARW-net/ARW.WebApi/Properties/PublishProfiles/FolderProfile2.pubxml @@ -0,0 +1,16 @@ + + + + + False + False + True + Release + Any CPU + FileSystem + bin\Release\net6.0\publish\ + FileSystem + + \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/Properties/launchSettings.json b/ARW-net/ARW.WebApi/Properties/launchSettings.json new file mode 100644 index 0000000..60db5a9 --- /dev/null +++ b/ARW-net/ARW.WebApi/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "ARW.Admin.WebApi": { + "commandName": "Project", + "launchBrowser": false, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:8777" + } + } +} \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/appsettings.json b/ARW-net/ARW.WebApi/appsettings.json new file mode 100644 index 0000000..163561b --- /dev/null +++ b/ARW-net/ARW.WebApi/appsettings.json @@ -0,0 +1,101 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + //"Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "ConnectionStrings": { + //"conn_db": "Data Source=localhost;port=3306;User ID=root;Password=root;Database=chat;CharSet=utf8mb4;sslmode=none;AllowLoadLocalInfile=true;", //其他连接字符串请看官方文档: null, + "conn_db": "Data Source=47.242.159.172;port=3306;User ID=chat;Password=chat@aerwen;Database=chat;CharSet=utf8mb4;sslmode=none;AllowLoadLocalInfile=true;", //其他连接字符串请看官方文档: null, + "conn_db_type": "8" //数据库类型 MySql = 0, SqlServer = 1 + }, + "urls": "http://localhost:8777", //项目启动url,如果改动端口前端对应devServer也需要进行修改 + "corsUrls": "http://localhost:8776,http://localhost:8775", //跨域地址(前端启动项目,前后端分离单独部署需要设置),多个用","隔开 + "JwtSettings": { + "Issuer": "ARWAdmin.NET", + "Audience": "ARWAdmin.NET", + "SecretKey": "SecretKey-ARWADMIN.NET-20210101", + "Expire": 1440 //jwt登录过期时间(分) + }, + "InitDb": false, //是否初始化db + "DemoMode": false, //是否演示模式 + "Upload": { + "UploadUrl": "http://localhost:8777", //本地存储资源访问路径 + "localSavePath": "uploads" //本地上传默认文件存储目录 wwwroot/uploads + }, + //阿里云存储配置 + "AARWYUN_OSS": { + "REGIONID": "", + "KEY": "", + "SECRET": "", + "bucketName": "", + "domainUrl": "" //访问资源域名 + }, + "gen": { + "conn": "Data Source=localhost;port=3306;User ID=root;Password=root;Database=chat;CharSet=utf8;sslmode=none;", + "dbType": 0, //MySql = 0, SqlServer = 1 + "autoPre": false, //自动去除表前缀 + "author": "admin", + "tablePrefix": "sys_", //"表前缀(生成类名不会包含表前缀,多个用逗号分隔)", + "vuePath": "" //前端代码存储路径eg:D:\Work\ARWAdmin-Vue3 + }, + //邮箱配置信息 + "MailOptions": { + //发送人邮箱 + "From": "", //eg:xxxx@qq.com + //发送人邮箱密码 + "Password": "", + //协议 + "Smtp": "smtp.qq.com", + "Port": 465, + "Signature": "系统邮件,请勿回复!" + }, + //redis服务配置 + "RedisServer": { + "Cache": "127.0.0.1:6379,defaultDatabase=0,poolsize=50,ssl=false,writeBuffer=10240,prefix=cache:", + "Session": "127.0.0.1:6379,defaultDatabase=0,poolsize=50,ssl=false,writeBuffer=10240,prefix=session:" + }, + //接口请求限制 + "IpRateLimiting": { + "EnableEndpointRateLimiting": true, + "StackBlockedRequests": false, + "RealIpHeader": "X-Real-IP", + "ClientIdHeader": "X-ClientId", + "HttpStatusCode": 429, + "EndpointWhitelist": [ "post:/system/dict/data/types", "*:/msghub/negotiate", "*:/LogOut" ], + "QuotaExceededResponse": { + "Content": "{{\"code\":429,\"msg\":\"访问过于频繁,请稍后重试\"}}", + "ContentType": "application/json", + "StatusCode": 429 + }, + //通用规则,api规则,结尾一定要带* + "GeneralRules": [ + { + "Endpoint": "*:/captchaImage", + //时间段,格式:{数字}{单位};可使用单位:s, m, h, d + "Period": "3s", + "Limit": 5 + }, + { + "Endpoint": "post:*", + //时间段,格式:{数字}{单位};可使用单位:s, m, h, d + "Period": "3s", + "Limit": 1 + }, + { + "Endpoint": "put:*", + //时间段,格式:{数字}{单位};可使用单位:s, m, h, d + "Period": "3s", + "Limit": 1 + } + ], + "IpRateLimitPolicies": { + //ip规则 + "IpRules": [ + ] + } + } + +} diff --git a/ARW-net/ARW.WebApi/ip2region.db b/ARW-net/ARW.WebApi/ip2region.db new file mode 100644 index 0000000..0fc60e6 Binary files /dev/null and b/ARW-net/ARW.WebApi/ip2region.db differ diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/CurdForm.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/CurdForm.txt new file mode 100644 index 0000000..bfc1360 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/CurdForm.txt @@ -0,0 +1,108 @@ +$foreach(column in genTable.Columns) +$set(labelName = "") +$set(labelDisabled = "") +$set(columnName = column.CsharpFieldFl) +$set(value = "item.dictValue") +$if(column.ColumnComment != "") +$set(labelName = column.ColumnComment) +$else +$set(labelName = column.CsharpFieldFl) +$end +$if(column.IsPk == true) +$set(labelDisabled = ":disabled=true") +$end +$if(column.CsharpType == "int" || column.CsharpType == "long") + $set(value = "parseInt(item.dictValue)") +$end + +$if(tool.CheckInputDtoNoField(column.CsharpField)) +$elseif(column.IsInsert == false && column.IsEdit == false) + + {{form.${columnName}}} + +$elseif(tool.CheckTree(genTable ,column.CsharpField)) + + + + + +$elseif(column.IsPK || column.IsIncrement) + + +$if(column.IsIncrement == false) + +$else + +$end + + +$else +$if(column.HtmlType == "inputNumber") + + + + + +$elseif(column.HtmlType == "datetime") + + + + + +$elseif(column.HtmlType == "imageUpload") + + + + + +$elseif(column.HtmlType == "fileUpload") + + + + + +$elseif(column.HtmlType == "radio") + + + + {{item.dictLabel}} + + + +$elseif(column.HtmlType == "textarea") + + + + + +$elseif(column.HtmlType == "editor") + + + + + +$elseif(column.HtmlType == "select") + + + + + + + +$elseif(column.HtmlType == "checkbox") + + + + {{item.dictLabel}} + + + +$else + + + + + +$end +$end +$end \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/MySqlTemplate.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/MySqlTemplate.txt new file mode 100644 index 0000000..481abec --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/MySqlTemplate.txt @@ -0,0 +1,30 @@ +use +Admin; + +-- 菜单 +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) +VALUES ('${genTable.functionName}', ${parentId}, 999, '${genTable.BusinessName}', '${tool.FirstLowerCase(genTable.ModuleName)}/${genTable.BusinessName}', 0, 0, 'C', '0', '0', '${replaceDto.PermissionPrefix}:list', 'icon1', 'system', sysdate()); + +-- 按钮父菜单id +SELECT @menuId := LAST_INSERT_ID(); + + +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) +VALUES ('查询', @menuId, 1, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.PermissionPrefix}:query', '', 'system', sysdate()); + +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) +VALUES ('新增', @menuId, 2, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.PermissionPrefix}:add', '', 'system', sysdate()); + +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) +VALUES ('删除', @menuId, 3, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.PermissionPrefix}:delete', '', 'system', sysdate()); + +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) +VALUES ('修改', @menuId, 4, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.PermissionPrefix}:edit', '', 'system', sysdate()); + +$if(replaceDto.ShowBtnExport) +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) +VALUES ('导出', @menuId, 5, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.PermissionPrefix}:export', '', 'system', sysdate()); +$end + +SELECT * FROM sys_menu WHERE parentId = @menuId; +SELECT * FROM sys_menu WHERE menuId = @menuId; \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/QueryForm.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/QueryForm.txt new file mode 100644 index 0000000..396efa9 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/QueryForm.txt @@ -0,0 +1,33 @@ +$foreach(column in genTable.Columns) +$set(labelName = "") +$set(columnName = "") +$set(numLabel = "") +$if(column.IsQuery == true) + $set(columnName = column.CsharpFieldFl) + $if(column.ColumnComment != "") + $set(labelName = column.ColumnComment) + $else + $set(labelName = column.CsharpFieldFl) + $end + $if(column.CsharpType == "int" || column.CsharpType == "long") + $set(numLabel = ".number") + $end + +$if(column.HtmlType == "datetime") + + + +$elseif(column.HtmlType == "select" || column.HtmlType == "radio") + + + + + +$else + + + +$end +$end +$end \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/SqlTemplate.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/SqlTemplate.txt new file mode 100644 index 0000000..95324d8 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/SqlTemplate.txt @@ -0,0 +1,29 @@ +use LiAdmin; + +-- ${genTable.functionName}菜单 +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) +VALUES ('${genTable.functionName}', ${parentId}, 999, '${genTable.BusinessName}', '${tool.FirstLowerCase(genTable.ModuleName)}/${genTable.BusinessName}', 0, 0, 'C', '0', '0', '${replaceDto.PermissionPrefix}:list', 'icon1', 'system', GETDATE()); + +-- 按钮父菜单id +declare @menuId int = @@identity + + +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) +VALUES ('查询', @menuId, 1, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.PermissionPrefix}:query', '', 'system', GETDATE()); + +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) +VALUES ('新增', @menuId, 2, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.PermissionPrefix}:add', '', 'system', GETDATE()); + +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) +VALUES ('删除', @menuId, 3, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.PermissionPrefix}:delete', '', 'system', GETDATE()); + +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) +VALUES ('修改', @menuId, 4, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.PermissionPrefix}:edit', '', 'system', GETDATE()); + +$if(replaceDto.ShowBtnExport) +INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) +VALUES ('导出', @menuId, 5, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.PermissionPrefix}:export', '', 'system', GETDATE()); +$end + +SELECT * FROM sys_menu WHERE parentId = @menuId; +SELECT * FROM sys_menu WHERE menuId = @menuId; \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TableList.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TableList.txt new file mode 100644 index 0000000..eb32a34 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TableList.txt @@ -0,0 +1,45 @@ +$foreach(column in genTable.Columns) +$set(labelName = "") +$set(checkboxHtml = "") +$set(showToolTipHtml = "") +$set(columnName = column.CsharpFieldFl) +$if(column.CsharpType == "string" || column.HtmlType == "datetime") +$set(showToolTipHtml = " :show-overflow-tooltip=\"true\"") +$end +$if(column.ColumnComment != "") +$set(labelName = column.ColumnComment) +$else +$set(labelName = column.CsharpFieldFl) +$end +$if(column.IsList == true) +$if(column.HtmlType == "customInput" && column.IsPk == false) + + + +$elseif(column.HtmlType == "imageUpload") + + + +$elseif(column.HtmlType == "checkbox" || column.HtmlType == "select" || column.HtmlType == "radio") + + + +$else + +$end +$end +$end \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt new file mode 100644 index 0000000..51d5983 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt @@ -0,0 +1,187 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using ${options.ModelsNamespace}.Dto; +using ${options.ModelsNamespace}.Models; +using ${options.IServicsNamespace}.${options.SubNamespace}.I${options.SubNamespace}Service; +using ${options.ApiControllerNamespace}.Extensions; +using ${options.ApiControllerNamespace}.Filters; +using ${options.BaseNamespace}Common; + +namespace ${options.ApiControllerNamespace}.Controllers +{ + /// + /// ${genTable.functionName}Controller + /// + /// @tableName ${genTable.TableName} + /// @author ${replaceDto.Author} + /// @date ${replaceDto.AddTime} + /// + [Verify] + [Route("${genTable.ModuleName}/${genTable.BusinessName}")] + public class ${replaceDto.ModelTypeName}Controller : BaseController + { + /// + /// ${genTable.FunctionName}接口 + /// + private readonly I${replaceDto.ModelTypeName}Service _${replaceDto.ModelTypeName}Service; + + public ${replaceDto.ModelTypeName}Controller(I${replaceDto.ModelTypeName}Service ${replaceDto.ModelTypeName}Service) + { + _${replaceDto.ModelTypeName}Service = ${replaceDto.ModelTypeName}Service; + } + + /// + /// 查询${genTable.FunctionName}列表 + /// + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:list")] + public IActionResult Query${replaceDto.ModelTypeName}([FromQuery] ${replaceDto.ModelTypeName}QueryDto parm) + { + var response = _${replaceDto.ModelTypeName}Service.GetList(parm); + return SUCCESS(response); + } + +$if(genTable.TplCategory == "tree") + /// + /// 查询${genTable.FunctionName}列表树 + /// + /// + /// + [HttpGet("treeList")] + [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:list")] + public IActionResult QueryTree${replaceDto.ModelTypeName}([FromQuery] ${replaceDto.ModelTypeName}QueryDto parm) + { + var response = _${replaceDto.ModelTypeName}Service.GetTreeList(parm); + return SUCCESS(response); + } +$end + + /// + /// 查询${genTable.FunctionName}详情 + /// + /// + /// + [HttpGet("{${replaceDto.PKName}}")] + [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:query")] + public IActionResult Get${replaceDto.ModelTypeName}(${replaceDto.PKType} ${replaceDto.PKName}) + { + var response = _${replaceDto.ModelTypeName}Service.GetFirst(x => x.${replaceDto.PKName} == ${replaceDto.PKName}); + + return SUCCESS(response); + } + +$if(replaceDto.ShowBtnAdd) + /// + /// 添加${genTable.FunctionName} + /// + /// + [HttpPost] + [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:add")] + [Log(Title = "${genTable.FunctionName}", BusinessType = BusinessType.INSERT)] + public IActionResult Add${replaceDto.ModelTypeName}([FromBody] ${replaceDto.ModelTypeName}Dto parm) + { + if (parm == null) + { + throw new CustomException("请求参数错误"); + } + var modal = parm.Adapt<${replaceDto.ModelTypeName}>().ToCreate(HttpContext); + + var response = _${replaceDto.ModelTypeName}Service.Add${replaceDto.ModelTypeName}(modal); + + return ToResponse(response); + } +$end + +$if(replaceDto.ShowBtnEdit) + /// + /// 更新${genTable.FunctionName} + /// + /// + [HttpPut] + [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:edit")] + [Log(Title = "${genTable.FunctionName}", BusinessType = BusinessType.UPDATE)] + public IActionResult Update${replaceDto.ModelTypeName}([FromBody] ${replaceDto.ModelTypeName}Dto parm) + { + if (parm == null) + { + throw new CustomException("请求实体不能为空"); + } + var modal = parm.Adapt<${replaceDto.ModelTypeName}>().ToUpdate(HttpContext); + + var response = _${replaceDto.ModelTypeName}Service.Update${replaceDto.ModelTypeName}(modal); + + return ToResponse(response); + } +$end + +$if(replaceDto.ShowBtnDelete) + /// + /// 删除${genTable.FunctionName} + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:delete")] + [Log(Title = "${genTable.FunctionName}", BusinessType = BusinessType.DELETE)] + public IActionResult Delete${replaceDto.ModelTypeName}(string ids) + { + int[] idsArr = Tools.SpitIntArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + + var response = _${replaceDto.ModelTypeName}Service.Delete(idsArr); + + return ToResponse(response); + } +$end + +$if(replaceDto.ShowBtnExport) + /// + /// 导出${genTable.FunctionName} + /// + /// + [Log(Title = "${genTable.FunctionName}", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] + [HttpGet("export")] + [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:export")] + public IActionResult Export([FromQuery] ${replaceDto.ModelTypeName}QueryDto parm) + { + parm.PageSize = 10000; + var list = _${replaceDto.ModelTypeName}Service.GetList(parm).Result; + + string sFileName = ExportExcel(list, "${replaceDto.ModelTypeName}", "${genTable.FunctionName}"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } +$end + +$if(showCustomInput) + /// + /// 保存排序 + /// + /// 主键 + /// 排序值 + /// + [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:edit")] + [HttpGet("ChangeSort")] + [Log(Title = "保存排序", BusinessType = BusinessType.UPDATE)] + public IActionResult ChangeSort(int id = 0, int value = 0) + { + if (id <= 0) { return ToResponse(ApiResult.Error(101, "请求参数错误")); } + var response = _${replaceDto.ModelTypeName}Service.Update(w => w.${replaceDto.PKName} == id, it => new ${replaceDto.ModelTypeName}() + { + //Update 字段映射 +$foreach(item in genTable.Columns) +$if((item.htmlType == "customInput")) + $item.CsharpField = value, +$end +${end} + }); + + return ToResponse(response); + } +$end + } +} \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplDto.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplDto.txt new file mode 100644 index 0000000..f697b72 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplDto.txt @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using ${options.ModelsNamespace}.Dto; +using ${options.ModelsNamespace}.Models; + +namespace ${options.DtosNamespace}.Dto +{ + /// + /// ${genTable.FunctionName}输入对象 + /// + public class ${replaceDto.ModelTypeName}Dto + { +$foreach(item in genTable.Columns) +$if((item.IsInsert || item.IsEdit || item.IsPk || item.IsIncrement)) +$if(item.IsRequired) + [Required(ErrorMessage = "${item.ColumnComment}不能为空")] +$end + public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; } +$end +$end + } + + /// + /// ${genTable.FunctionName}查询对象 + /// + public class ${replaceDto.ModelTypeName}QueryDto : PagerInfo + { +$foreach(item in genTable.Columns) +$if(item.IsQuery && item.htmlType == "datetime") + public DateTime? Begin$item.CsharpField { get; set; } + public DateTime? End$item.CsharpField { get; set; } +$elseif(item.IsQuery) + public $item.CsharpType$if(item.CsharpType != "string")?$end $item.CsharpField { get; set; } +$end +$end + } +} diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplIService.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplIService.txt new file mode 100644 index 0000000..f30aecd --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplIService.txt @@ -0,0 +1,26 @@ +using System; +using ${options.ModelsNamespace}; +using ${options.ModelsNamespace}.Dto; +using ${options.ModelsNamespace}.Models; +using System.Collections.Generic; + +namespace ${options.IServicsNamespace}.${options.SubNamespace}.I${options.SubNamespace}Service +{ + /// + /// ${genTable.FunctionName}service接口 + /// + /// @author ${replaceDto.Author} + /// @date ${replaceDto.AddTime} + /// + public interface I${replaceDto.ModelTypeName}Service : IBaseService<${replaceDto.ModelTypeName}> + { + PagedInfo<${replaceDto.ModelTypeName}> GetList(${replaceDto.ModelTypeName}QueryDto parm); + +$if(genTable.TplCategory == "tree") + List<${replaceDto.ModelTypeName}> GetTreeList(${replaceDto.ModelTypeName}QueryDto parm); +$end + int Add${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} parm); + + int Update${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} parm); + } +} diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplModel.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplModel.txt new file mode 100644 index 0000000..b779e2a --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplModel.txt @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using SqlSugar; +using OfficeOpenXml.Attributes; + +namespace ${options.ModelsNamespace}.Models +{ + /// + /// ${genTable.FunctionName},数据实体对象 + /// + /// @author ${replaceDto.Author} + /// @date ${replaceDto.AddTime} + /// + [SugarTable("${genTable.TableName}")] + public class ${replaceDto.ModelTypeName} + { +$foreach(item in genTable.Columns) + /// + /// 描述 :${item.ColumnComment} ${item.Remark} + /// 空值 :$if(item.IsRequired == "True") false $else true $end + /// +$if(replaceDto.ShowBtnExport) + [EpplusTableColumn(Header = "$if(item.ColumnComment == "")${item.CsharpField}${else}${item.ColumnComment}${end}"$if(item.CsharpType == "DateTime"), NumberFormat = "yyyy-MM-dd HH:mm:ss"$end)] +$end +$if(item.IsPk || item.IsIncrement) + [SugarColumn(IsPrimaryKey = ${item.IsPk.ToString().ToLower()}, IsIdentity = ${item.IsIncrement.ToString().ToLower()}$if(item.CsharpField.ToLower() != item.ColumnName.ToLower()), ColumnName = "$item.ColumnName"$end)] +$elseif(item.CsharpField.ToLower() != item.ColumnName.ToLower()) + [SugarColumn(ColumnName = "$item.ColumnName")] +$end + public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; } + +${end} +$if(genTable.TplCategory == "tree") + + [SugarColumn(IsIgnore = true)] + public List<${replaceDto.ModelTypeName}> Children { get; set; } +$end + +$if(genTable.TplCategory == "subNav" && genTable.SubTable != null) + [Navigate(NavigateType.Dynamic, null)] //自定义关系映射 + public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName} { get; set; } +$end + +$if(genTable.TplCategory == "subNavMore" && genTable.SubTable != null) + [Navigate(NavigateType.Dynamic, null)] //自定义关系映射 + public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName} { get; set; } +$end + } +} \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplRepository.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplRepository.txt new file mode 100644 index 0000000..cd43d77 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplRepository.txt @@ -0,0 +1,20 @@ +using System; +using Infrastructure.Attribute; +using ${options.RepositoriesNamespace}.System; +using ${options.ModelsNamespace}.Models; + +namespace ${options.RepositoriesNamespace} +{ + /// + /// ${genTable.FunctionName}仓储 + /// + /// @author ${replaceDto.Author} + /// @date ${replaceDto.AddTime} + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class ${replaceDto.ModelTypeName}Repository : BaseRepository<${replaceDto.ModelTypeName}> + { + #region 业务逻辑代码 + #endregion + } +} \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplService.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplService.txt new file mode 100644 index 0000000..ce428f3 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplService.txt @@ -0,0 +1,133 @@ +using System; +using SqlSugar; +using System.Collections.Generic; +using Infrastructure; +using Infrastructure.Attribute; +using ${options.ModelsNamespace}; +using ${options.ModelsNamespace}.Dto; +using ${options.ModelsNamespace}.Models; +using ${options.IRepositoriesNamespace}; +using ${options.IServicsNamespace}.${options.SubNamespace}.I${options.SubNamespace}Service; + +namespace ${options.ServicesNamespace}.${options.SubNamespace} +{ + /// + /// ${genTable.FunctionName}Service业务层处理 + /// + /// @author ${replaceDto.Author} + /// @date ${replaceDto.AddTime} + /// + [AppService(ServiceType = typeof(I${replaceDto.ModelTypeName}Service), ServiceLifetime = LifeTime.Transient)] + public class ${replaceDto.ModelTypeName}Service : BaseService<${replaceDto.ModelTypeName}>, I${replaceDto.ModelTypeName}Service + { + private readonly ${replaceDto.ModelTypeName}Repository _${replaceDto.ModelTypeName}Repository; + public ${replaceDto.ModelTypeName}Service(${replaceDto.ModelTypeName}Repository repository) + { + _${replaceDto.ModelTypeName}Repository = repository; + } + + #region 业务逻辑代码 + + /// + /// 查询${genTable.FunctionName}列表 + /// + /// + /// + public PagedInfo<${replaceDto.ModelTypeName}> GetList(${replaceDto.ModelTypeName}QueryDto parm) + { + //开始拼装查询条件 + var predicate = Expressionable.Create<${replaceDto.ModelTypeName}>(); + + //搜索条件查询语法参考Sqlsugar +$foreach(column in genTable.Columns) +$if(column.IsQuery) +$if(column.CsharpType == "string") + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.${column.CsharpField}), ${codeTool.QueryExp(column.CsharpField, column.QueryType)}; +$elseif(column.CsharpType == "DateTime") + predicate = predicate.AndIF(parm.Begin${column.CsharpField} == null, it => it.${column.CsharpField} >= DateTime.Now.AddDays(-1)); + predicate = predicate.AndIF(parm.Begin${column.CsharpField} != null, it => it.${column.CsharpField} >= parm.Begin${column.CsharpField} && it.${column.CsharpField} <= parm.End${column.CsharpField}); +$elseif(column.CsharpType == "int" || column.CsharpType == "long") + predicate = predicate.AndIF(parm.${column.CsharpField} != null, ${codeTool.QueryExp(column.CsharpField, column.QueryType)}; +$end +$end +$end + var response = _${replaceDto.ModelTypeName}Repository + .Queryable() +$if(null != genTable.SubTableName && "" != genTable.SubTableName) + .Includes(it => it.${genTable.SubTable.ClassName}.MappingField(z => z.${genTable.SubTableFkName}, () => it.${replaceDto.PKName})) +$end +$if(genTable.Options.SortField != "" && genTable.Options.SortField != null) + .OrderBy("${genTable.Options.SortField} ${genTable.Options.SortType}") +$end + .Where(predicate.ToExpression()) + .ToPage(parm); + + return response; + } + +$if(genTable.TplCategory == "tree") + /// + /// 查询${genTable.FunctionName}树列表 + /// + /// + /// + public List<${replaceDto.ModelTypeName}> GetTreeList(${replaceDto.ModelTypeName}QueryDto parm) + { + //开始拼装查询条件 + var predicate = Expressionable.Create<${replaceDto.ModelTypeName}>(); + + //搜索条件查询语法参考Sqlsugar +$foreach(column in genTable.Columns) +$if(column.IsQuery) +$if(column.CsharpType == "string") + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.${column.CsharpField}), ${codeTool.QueryExp(column.CsharpField, column.QueryType)}; +$elseif(column.CsharpType == "int" || column.CsharpType == "long") + predicate = predicate.AndIF(parm.${column.CsharpField} != null, ${codeTool.QueryExp(column.CsharpField, column.QueryType)}; +$end +$end +$end + + var response = _${replaceDto.ModelTypeName}Repository.Queryable().Where(predicate.ToExpression()) + .ToTree(it => it.Children, it => it.${genTable.Options.TreeParentCode}, 0); + + return response; + } +$end + /// + /// 添加${genTable.FunctionName} + /// + /// + /// + public int Add${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} parm) + { + var response = _${replaceDto.ModelTypeName}Repository.Insert(parm, it => new + { +${foreach(item in genTable.Columns)} +$if((item.IsInsert)) + it.$item.CsharpField, +$end +${end} + }); + return response; + } + + /// + /// 修改${genTable.FunctionName} + /// + /// + /// + public int Update${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} parm) + { + var response = _${replaceDto.ModelTypeName}Repository.Update(w => w.${replaceDto.PKName} == parm.${replaceDto.PKName}, it => new ${replaceDto.ModelTypeName}() + { +$foreach(item in genTable.Columns) +$if((item.IsEdit)) + $item.CsharpField = parm.$item.CsharpField, +$end +${end} + }); + return response; + } + #endregion + } +} \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt new file mode 100644 index 0000000..72cfae3 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt @@ -0,0 +1,394 @@ + + + \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplVue.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplVue.txt new file mode 100644 index 0000000..f4f5d5a --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplVue.txt @@ -0,0 +1,390 @@ + + + \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt new file mode 100644 index 0000000..48d25b9 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt @@ -0,0 +1,93 @@ +import request from '@/utils/request' + +/** +* ${genTable.functionName}分页查询 +* @param {查询条件} data +*/ +export function list${genTable.BusinessName}(query) { + return request({ + url: '${genTable.ModuleName}/${genTable.BusinessName}/list', + method: 'get', + params: query, + }) +} + +$if(genTable.TplCategory == "tree") +/** +* ${genTable.functionName}tree查询 +* @param {查询条件} data +*/ +export function treelist${genTable.BusinessName}(query) { + return request({ + url: '${genTable.ModuleName}/${genTable.BusinessName}/treelist', + method: 'get', + params: query, + }) +} +$end + +/** +* 新增${genTable.functionName} +* @param data +*/ +export function add${genTable.BusinessName}(data) { + return request({ + url: '${genTable.ModuleName}/${genTable.BusinessName}', + method: 'post', + data: data, + }) +} + +/** +* 修改${genTable.functionName} +* @param data +*/ +export function update${genTable.BusinessName}(data) { + return request({ + url: '${genTable.ModuleName}/${genTable.BusinessName}', + method: 'PUT', + data: data, + }) +} + +/** +* 获取${genTable.functionName}详情 +* @param {Id} +*/ +export function get${genTable.BusinessName}(id) { + return request({ + url: '${genTable.ModuleName}/${genTable.BusinessName}/' + id, + method: 'get' + }) +} + +/** +* 删除${genTable.functionName} +* @param {主键} pid +*/ +export function del${genTable.BusinessName}(pid) { + return request({ + url: '${genTable.ModuleName}/${genTable.BusinessName}/' + pid, + method: 'delete' + }) +} + +// 导出${genTable.functionName} +export function export${genTable.BusinessName}(query) { + return request({ + url: '${genTable.ModuleName}/${genTable.BusinessName}/export', + method: 'get', + params: query + }) +} + +$if(showCustomInput) +//排序 +export function changeSort(data) { + return request({ + url: '${genTable.ModuleName}/${genTable.BusinessName}/ChangeSort', + method: 'get', + params: data + }) +} +$end \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt new file mode 100644 index 0000000..8849f45 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt @@ -0,0 +1,263 @@ + + + \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt new file mode 100644 index 0000000..dc05b23 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt @@ -0,0 +1,565 @@ + + + \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt new file mode 100644 index 0000000..a379219 --- /dev/null +++ b/ARW-net/ARW.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -0,0 +1,561 @@ + + + + + \ No newline at end of file diff --git a/ARW-net/ARW.WebApi/wwwroot/email/20220723/75FE70F994AA3573.xlsx b/ARW-net/ARW.WebApi/wwwroot/email/20220723/75FE70F994AA3573.xlsx new file mode 100644 index 0000000..953c46a Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/email/20220723/75FE70F994AA3573.xlsx differ diff --git a/ARW-net/ARW.WebApi/wwwroot/test/20220727/7A6E0D2F95C3C19F.jpg b/ARW-net/ARW.WebApi/wwwroot/test/20220727/7A6E0D2F95C3C19F.jpg new file mode 100644 index 0000000..634112a Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/test/20220727/7A6E0D2F95C3C19F.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/text/20220713/mm.jpg b/ARW-net/ARW.WebApi/wwwroot/text/20220713/mm.jpg new file mode 100644 index 0000000..277fe6b Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/text/20220713/mm.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/text/20220713/nn.jpg b/ARW-net/ARW.WebApi/wwwroot/text/20220713/nn.jpg new file mode 100644 index 0000000..d5ae50d Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/text/20220713/nn.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/0.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/0.jpg new file mode 100644 index 0000000..65316c6 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/0.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/5AF42613B50E36A0.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/5AF42613B50E36A0.jpg new file mode 100644 index 0000000..774d5df Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/5AF42613B50E36A0.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/6E3D4A74C85034F0.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/6E3D4A74C85034F0.png new file mode 100644 index 0000000..b3a073d Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/6E3D4A74C85034F0.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/9B559E8EB8911A0C.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/9B559E8EB8911A0C.png new file mode 100644 index 0000000..b3a073d Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220723/9B559E8EB8911A0C.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220726/6E5A61D2D259755C.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220726/6E5A61D2D259755C.jpg new file mode 100644 index 0000000..37d3d96 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220726/6E5A61D2D259755C.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220726/8BC69F30ED22F28E.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220726/8BC69F30ED22F28E.jpg new file mode 100644 index 0000000..37d3d96 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220726/8BC69F30ED22F28E.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/017814321664F035.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/017814321664F035.jpg new file mode 100644 index 0000000..774d5df Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/017814321664F035.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/56AB22F790F51C2C.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/56AB22F790F51C2C.jpg new file mode 100644 index 0000000..774d5df Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/56AB22F790F51C2C.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/F2970B7B2806B62B.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/F2970B7B2806B62B.jpg new file mode 100644 index 0000000..8164cf3 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/F2970B7B2806B62B.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220901/AA06C277DD3F8380.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220901/AA06C277DD3F8380.jpg new file mode 100644 index 0000000..8164cf3 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220901/AA06C277DD3F8380.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220902/04808B0D88D54E04.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220902/04808B0D88D54E04.png new file mode 100644 index 0000000..4f78a87 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220902/04808B0D88D54E04.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220902/769047AC858DACD4.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220902/769047AC858DACD4.jpg new file mode 100644 index 0000000..774d5df Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220902/769047AC858DACD4.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220903/4AEBEF89F4FBB024.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220903/4AEBEF89F4FBB024.jpg new file mode 100644 index 0000000..774d5df Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220903/4AEBEF89F4FBB024.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220903/AC4CC41E0C93D74C.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220903/AC4CC41E0C93D74C.jpg new file mode 100644 index 0000000..774d5df Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220903/AC4CC41E0C93D74C.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220905/B1FC58DBAB7B0295.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220905/B1FC58DBAB7B0295.jpg new file mode 100644 index 0000000..1466c5c Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220905/B1FC58DBAB7B0295.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220905/F6B06CC126E60A2E.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220905/F6B06CC126E60A2E.jpg new file mode 100644 index 0000000..291dbfa Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220905/F6B06CC126E60A2E.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220908/1FA41C90030228A0.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220908/1FA41C90030228A0.png new file mode 100644 index 0000000..f26de43 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220908/1FA41C90030228A0.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220917/3715C6FEFDF08D82.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220917/3715C6FEFDF08D82.jpg new file mode 100644 index 0000000..a119f8c Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220917/3715C6FEFDF08D82.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/1156581EB0DE5C94.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/1156581EB0DE5C94.jpg new file mode 100644 index 0000000..8164cf3 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/1156581EB0DE5C94.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/4E5F93B235FCD3F5.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/4E5F93B235FCD3F5.jpg new file mode 100644 index 0000000..774d5df Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/4E5F93B235FCD3F5.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/4EABEF6CF26A2A13.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/4EABEF6CF26A2A13.jpg new file mode 100644 index 0000000..a119f8c Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/4EABEF6CF26A2A13.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/F5AC92A7A5ACA4CB.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/F5AC92A7A5ACA4CB.jpg new file mode 100644 index 0000000..1466c5c Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/F5AC92A7A5ACA4CB.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/058FFAF209BF7A99.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/058FFAF209BF7A99.jpg new file mode 100644 index 0000000..f5e821b Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/058FFAF209BF7A99.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/809EA20B6E36F4E7.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/809EA20B6E36F4E7.jpg new file mode 100644 index 0000000..8164cf3 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/809EA20B6E36F4E7.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/8C74FE97C6058FAE.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/8C74FE97C6058FAE.jpg new file mode 100644 index 0000000..ebd1e8a Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/8C74FE97C6058FAE.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/DA0478A903E64076.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/DA0478A903E64076.jpg new file mode 100644 index 0000000..8164cf3 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/DA0478A903E64076.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/7248DECA1E64F825.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/7248DECA1E64F825.jpg new file mode 100644 index 0000000..3e542e7 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/7248DECA1E64F825.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/A2AC114F9D393C37.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/A2AC114F9D393C37.png new file mode 100644 index 0000000..3a051cc Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/A2AC114F9D393C37.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/C6D4DC432E7823B3.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/C6D4DC432E7823B3.jpg new file mode 100644 index 0000000..06781ff Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/C6D4DC432E7823B3.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/FFFF004678B16B0B.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/FFFF004678B16B0B.jpg new file mode 100644 index 0000000..1466c5c Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/FFFF004678B16B0B.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/05CFA4D67F7A3D7C.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/05CFA4D67F7A3D7C.jpg new file mode 100644 index 0000000..172313d Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/05CFA4D67F7A3D7C.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/0A3A3DAB2477DB6D.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/0A3A3DAB2477DB6D.png new file mode 100644 index 0000000..632df75 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/0A3A3DAB2477DB6D.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/0E4C67755CC83E8E.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/0E4C67755CC83E8E.png new file mode 100644 index 0000000..9d86a48 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/0E4C67755CC83E8E.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/19CB593AD2D7B217.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/19CB593AD2D7B217.jpg new file mode 100644 index 0000000..774d5df Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/19CB593AD2D7B217.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/19D023DD81F497F3.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/19D023DD81F497F3.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/19D023DD81F497F3.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/1B37B47EBF0ACC35.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/1B37B47EBF0ACC35.png new file mode 100644 index 0000000..a085b6b Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/1B37B47EBF0ACC35.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/357FB9FFF6680E43.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/357FB9FFF6680E43.jpg new file mode 100644 index 0000000..65316c6 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/357FB9FFF6680E43.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/35CD628B14AF00C0.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/35CD628B14AF00C0.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/35CD628B14AF00C0.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/36CC1BA9989F41D0.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/36CC1BA9989F41D0.jpg new file mode 100644 index 0000000..8164cf3 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/36CC1BA9989F41D0.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/3C5C6630E1366EEF.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/3C5C6630E1366EEF.jpg new file mode 100644 index 0000000..774d5df Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/3C5C6630E1366EEF.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/42B0B8B291EC7766.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/42B0B8B291EC7766.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/42B0B8B291EC7766.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5602BB65124E86B8.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5602BB65124E86B8.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5602BB65124E86B8.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5826EB9B84AFDD53.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5826EB9B84AFDD53.png new file mode 100644 index 0000000..776cf1f Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5826EB9B84AFDD53.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5B5302AA778936E1.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5B5302AA778936E1.jpg new file mode 100644 index 0000000..a28a3a0 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5B5302AA778936E1.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/6FF9BD68A30E7913.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/6FF9BD68A30E7913.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/6FF9BD68A30E7913.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/70E4AF319A69AF16.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/70E4AF319A69AF16.jpg new file mode 100644 index 0000000..172313d Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/70E4AF319A69AF16.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/7250F4B0DDDB2E43.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/7250F4B0DDDB2E43.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/7250F4B0DDDB2E43.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/73699EF18DD670F2.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/73699EF18DD670F2.jpg new file mode 100644 index 0000000..65316c6 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/73699EF18DD670F2.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/74BE1823B1B45795.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/74BE1823B1B45795.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/74BE1823B1B45795.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/74CEDC5CA970DD23.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/74CEDC5CA970DD23.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/74CEDC5CA970DD23.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/852931362E331864.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/852931362E331864.png new file mode 100644 index 0000000..900879a Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/852931362E331864.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/89FF4199D715DDAA.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/89FF4199D715DDAA.png new file mode 100644 index 0000000..695aee5 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/89FF4199D715DDAA.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/8EFDA5117CBCAE60.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/8EFDA5117CBCAE60.jpg new file mode 100644 index 0000000..5cefdf1 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/8EFDA5117CBCAE60.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/972869B74439FDC0.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/972869B74439FDC0.jpg new file mode 100644 index 0000000..ebd1e8a Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/972869B74439FDC0.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/9DE549DD2BBF1CE7.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/9DE549DD2BBF1CE7.jpg new file mode 100644 index 0000000..f5e821b Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/9DE549DD2BBF1CE7.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A3A75B81DBCD7EC6.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A3A75B81DBCD7EC6.jpg new file mode 100644 index 0000000..016fea3 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A3A75B81DBCD7EC6.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A53F7C911A1FF6F6.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A53F7C911A1FF6F6.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A53F7C911A1FF6F6.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A5D1382662F591E3.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A5D1382662F591E3.png new file mode 100644 index 0000000..900879a Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A5D1382662F591E3.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A5FE206E59BFA409.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A5FE206E59BFA409.jpg new file mode 100644 index 0000000..0fb5651 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A5FE206E59BFA409.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A78DC9A99B6FB492.ico b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A78DC9A99B6FB492.ico new file mode 100644 index 0000000..0834909 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A78DC9A99B6FB492.ico differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A78DDEF5FD5FCCA9.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A78DDEF5FD5FCCA9.jpg new file mode 100644 index 0000000..5cefdf1 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A78DDEF5FD5FCCA9.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A95435C4A0491C86.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A95435C4A0491C86.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A95435C4A0491C86.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/ABB3E3C40492CD4C.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/ABB3E3C40492CD4C.jpg new file mode 100644 index 0000000..a112bdf Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/ABB3E3C40492CD4C.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/ABED21F2782D787F.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/ABED21F2782D787F.jpg new file mode 100644 index 0000000..65316c6 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/ABED21F2782D787F.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/AD22FB25F9A93D6B.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/AD22FB25F9A93D6B.jpg new file mode 100644 index 0000000..65316c6 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/AD22FB25F9A93D6B.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/AEFC5CCC12662C34.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/AEFC5CCC12662C34.jpg new file mode 100644 index 0000000..ca85c84 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/AEFC5CCC12662C34.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B171BAB03E7F363D.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B171BAB03E7F363D.jpg new file mode 100644 index 0000000..5cefdf1 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B171BAB03E7F363D.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B1FE39C84C462B02.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B1FE39C84C462B02.jpg new file mode 100644 index 0000000..d904d13 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B1FE39C84C462B02.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B2099BF2D7B7F046.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B2099BF2D7B7F046.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B2099BF2D7B7F046.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B679D3D88DF79934.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B679D3D88DF79934.jpg new file mode 100644 index 0000000..a28a3a0 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B679D3D88DF79934.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B72EB70E73BCBBE4.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B72EB70E73BCBBE4.png new file mode 100644 index 0000000..900879a Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B72EB70E73BCBBE4.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B927A34354D562FC.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B927A34354D562FC.png new file mode 100644 index 0000000..632df75 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B927A34354D562FC.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BB3F8C1A4A2C8876.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BB3F8C1A4A2C8876.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BB3F8C1A4A2C8876.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BC3B41631BD42707.ico b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BC3B41631BD42707.ico new file mode 100644 index 0000000..0834909 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BC3B41631BD42707.ico differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BEFB97F6FCC3DE72.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BEFB97F6FCC3DE72.jpg new file mode 100644 index 0000000..a112bdf Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BEFB97F6FCC3DE72.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C0503664C6CA4BFA.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C0503664C6CA4BFA.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C0503664C6CA4BFA.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C19D91C24C308DB7.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C19D91C24C308DB7.jpg new file mode 100644 index 0000000..774d5df Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C19D91C24C308DB7.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C383A12E5A8CE3C6.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C383A12E5A8CE3C6.jpg new file mode 100644 index 0000000..2783f33 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C383A12E5A8CE3C6.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/CAF770A26648B104.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/CAF770A26648B104.jpg new file mode 100644 index 0000000..1902276 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/CAF770A26648B104.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/CB3039C62C218FFC.png b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/CB3039C62C218FFC.png new file mode 100644 index 0000000..695aee5 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/CB3039C62C218FFC.png differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/D4FB903D7E961464.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/D4FB903D7E961464.jpg new file mode 100644 index 0000000..a112bdf Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/D4FB903D7E961464.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/D5207F143DBC4F50.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/D5207F143DBC4F50.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/D5207F143DBC4F50.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/EE08EB7B4656A1B0.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/EE08EB7B4656A1B0.jpg new file mode 100644 index 0000000..172313d Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/EE08EB7B4656A1B0.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/F25CFD436A8B5103.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/F25CFD436A8B5103.jpg new file mode 100644 index 0000000..5cefdf1 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/F25CFD436A8B5103.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/F26255D16DC930E8.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/F26255D16DC930E8.jpg new file mode 100644 index 0000000..a112bdf Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/F26255D16DC930E8.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FB9A0E2797F58555.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FB9A0E2797F58555.jpg new file mode 100644 index 0000000..65316c6 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FB9A0E2797F58555.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FC2E0B574656215E.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FC2E0B574656215E.jpg new file mode 100644 index 0000000..e8d3855 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FC2E0B574656215E.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FD4251FABA71A7ED.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FD4251FABA71A7ED.jpg new file mode 100644 index 0000000..5cefdf1 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FD4251FABA71A7ED.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/09F35E154C7A8CFA.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/09F35E154C7A8CFA.jpg new file mode 100644 index 0000000..926cb93 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/09F35E154C7A8CFA.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/2C4F4441FB4710C3.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/2C4F4441FB4710C3.jpg new file mode 100644 index 0000000..6b8392b Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/2C4F4441FB4710C3.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/371BB4D55B838750.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/371BB4D55B838750.jpg new file mode 100644 index 0000000..8164cf3 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/371BB4D55B838750.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/3ADE54BAE7E41262.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/3ADE54BAE7E41262.jpg new file mode 100644 index 0000000..8164cf3 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/3ADE54BAE7E41262.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/5433A7D9389E238B.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/5433A7D9389E238B.jpg new file mode 100644 index 0000000..926cb93 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/5433A7D9389E238B.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/7ADFB3BF8153EE40.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/7ADFB3BF8153EE40.jpg new file mode 100644 index 0000000..8164cf3 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/7ADFB3BF8153EE40.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/91361841E4440055.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/91361841E4440055.jpg new file mode 100644 index 0000000..4447375 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/91361841E4440055.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/A440804796E559BB.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/A440804796E559BB.jpg new file mode 100644 index 0000000..f5e821b Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/A440804796E559BB.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/B0B542D8AFA57F26.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/B0B542D8AFA57F26.jpg new file mode 100644 index 0000000..65316c6 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/B0B542D8AFA57F26.jpg differ diff --git a/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/CE6845D4D76F25A9.jpg b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/CE6845D4D76F25A9.jpg new file mode 100644 index 0000000..8164cf3 Binary files /dev/null and b/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/CE6845D4D76F25A9.jpg differ diff --git a/ARW-net/ARWAdmin.sln b/ARW-net/ARWAdmin.sln new file mode 100644 index 0000000..5180627 --- /dev/null +++ b/ARW-net/ARWAdmin.sln @@ -0,0 +1,70 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32210.238 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARW.WebApi", "ARW.WebApi\ARW.WebApi.csproj", "{E5497BB4-B0C1-4794-9FAE-163F626EC399}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARW.Model", "ARW.Model\ARW.Model.csproj", "{B35D73B1-2E22-4636-B88B-10C5E6D8E524}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARW.Common", "ARW.Common\ARW.Common.csproj", "{42C84599-1E99-45B4-929B-417C37337EF8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Infrastructure", "Infrastructure\Infrastructure.csproj", "{5D740120-5491-4FE2-B5BE-8A9C48BFE3C5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARW.Tasks", "ARW.Tasks\ARW.Tasks.csproj", "{B657ED99-40E5-423A-AFE7-157C4EE576CB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARW.Service", "ARW.Service\ARW.Service.csproj", "{75ADA3C1-148D-4727-A718-79447D9B5EEE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARW.Repository", "ARW.Repository\ARW.Repository.csproj", "{17E277BF-B2B8-4111-AE43-38246128C83C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARW.CodeGenerator", "ARW.CodeGenerator\ARW.CodeGenerator.csproj", "{B353DE0B-12C6-4C15-909A-DB68F71D5AE9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E5497BB4-B0C1-4794-9FAE-163F626EC399}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5497BB4-B0C1-4794-9FAE-163F626EC399}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5497BB4-B0C1-4794-9FAE-163F626EC399}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5497BB4-B0C1-4794-9FAE-163F626EC399}.Release|Any CPU.Build.0 = Release|Any CPU + {B35D73B1-2E22-4636-B88B-10C5E6D8E524}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B35D73B1-2E22-4636-B88B-10C5E6D8E524}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B35D73B1-2E22-4636-B88B-10C5E6D8E524}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B35D73B1-2E22-4636-B88B-10C5E6D8E524}.Release|Any CPU.Build.0 = Release|Any CPU + {42C84599-1E99-45B4-929B-417C37337EF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42C84599-1E99-45B4-929B-417C37337EF8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42C84599-1E99-45B4-929B-417C37337EF8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42C84599-1E99-45B4-929B-417C37337EF8}.Release|Any CPU.Build.0 = Release|Any CPU + {5D740120-5491-4FE2-B5BE-8A9C48BFE3C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5D740120-5491-4FE2-B5BE-8A9C48BFE3C5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D740120-5491-4FE2-B5BE-8A9C48BFE3C5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5D740120-5491-4FE2-B5BE-8A9C48BFE3C5}.Release|Any CPU.Build.0 = Release|Any CPU + {B657ED99-40E5-423A-AFE7-157C4EE576CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B657ED99-40E5-423A-AFE7-157C4EE576CB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B657ED99-40E5-423A-AFE7-157C4EE576CB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B657ED99-40E5-423A-AFE7-157C4EE576CB}.Release|Any CPU.Build.0 = Release|Any CPU + {75ADA3C1-148D-4727-A718-79447D9B5EEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75ADA3C1-148D-4727-A718-79447D9B5EEE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75ADA3C1-148D-4727-A718-79447D9B5EEE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75ADA3C1-148D-4727-A718-79447D9B5EEE}.Release|Any CPU.Build.0 = Release|Any CPU + {17E277BF-B2B8-4111-AE43-38246128C83C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {17E277BF-B2B8-4111-AE43-38246128C83C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {17E277BF-B2B8-4111-AE43-38246128C83C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {17E277BF-B2B8-4111-AE43-38246128C83C}.Release|Any CPU.Build.0 = Release|Any CPU + {B353DE0B-12C6-4C15-909A-DB68F71D5AE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B353DE0B-12C6-4C15-909A-DB68F71D5AE9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B353DE0B-12C6-4C15-909A-DB68F71D5AE9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B353DE0B-12C6-4C15-909A-DB68F71D5AE9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {60A6A299-13D7-4A17-8AB8-F1FE92657F85} + EndGlobalSection + GlobalSection(ExtensibiARWtyGlobals) = postSolution + SolutionGuid = {0469FF3A-7322-4053-94C7-881B103A57C5} + EndGlobalSection +EndGlobal diff --git a/ARW-net/Infrastructure/App/App.cs b/ARW-net/Infrastructure/App/App.cs new file mode 100644 index 0000000..663e8ef --- /dev/null +++ b/ARW-net/Infrastructure/App/App.cs @@ -0,0 +1,65 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Security.Claims; + +namespace Infrastructure +{ + public static class App + { + /// + /// 服务提供器 + /// + public static IServiceProvider ServiceProvider => HttpContext?.RequestServices ?? InternalApp.ServiceProvider; + /// + /// 获取请求上下文 + /// + public static HttpContext HttpContext => HttpContextLocal.Current(); + /// + /// 获取请求上下文用户 + /// + public static ClaimsPrincipal User => HttpContext?.User; + + /// + /// 获取请求生命周期的服务 + /// + /// + /// + public static TService GetService() + where TService : class + { + return GetService(typeof(TService)) as TService; + } + + /// + /// 获取请求生命周期的服务 + /// + /// + /// + public static object GetService(Type type) + { + return ServiceProvider.GetService(type); + } + + /// + /// 获取请求生命周期的服务 + /// + /// + /// + public static TService GetRequiredService() + where TService : class + { + return GetRequiredService(typeof(TService)) as TService; + } + + /// + /// 获取请求生命周期的服务 + /// + /// + /// + public static object GetRequiredService(Type type) + { + return ServiceProvider.GetRequiredService(type); + } + } +} diff --git a/ARW-net/Infrastructure/App/Web/HttpContextLocal.cs b/ARW-net/Infrastructure/App/Web/HttpContextLocal.cs new file mode 100644 index 0000000..8c0a96d --- /dev/null +++ b/ARW-net/Infrastructure/App/Web/HttpContextLocal.cs @@ -0,0 +1,59 @@ +using Microsoft.AspNetCore.Http; +using System; +using System.Linq.Expressions; +using System.Reflection; +using System.Threading; + +namespace Microsoft.AspNetCore.Http +{ + public static class HttpContextLocal + { + private static Func _asyncLocalAccessor; + private static Func _holderAccessor; + private static Func _httpContextAccessor; + + /// + /// 获取当前 HttpContext 对象 + /// + /// + public static HttpContext Current() + { + var asyncLocal = (_asyncLocalAccessor ??= CreateAsyncLocalAccessor())(); + if (asyncLocal == null) return null; + + var holder = (_holderAccessor ??= CreateHolderAccessor(asyncLocal))(asyncLocal); + if (holder == null) return null; + + return (_httpContextAccessor ??= CreateHttpContextAccessor(holder))(holder); + + // 创建异步本地访问器 + static Func CreateAsyncLocalAccessor() + { + var fieldInfo = typeof(HttpContextAccessor).GetField("_httpContextCurrent", BindingFlags.Static | BindingFlags.NonPublic); + var field = Expression.Field(null, fieldInfo); + return Expression.Lambda>(field).Compile(); + } + + // 创建常驻 HttpContext 访问器 + static Func CreateHolderAccessor(object asyncLocal) + { + var holderType = asyncLocal.GetType().GetGenericArguments()[0]; + var method = typeof(AsyncLocal<>).MakeGenericType(holderType).GetProperty("Value").GetGetMethod(); + var target = Expression.Parameter(typeof(object)); + var convert = Expression.Convert(target, asyncLocal.GetType()); + var getValue = Expression.Call(convert, method); + return Expression.Lambda>(getValue, target).Compile(); + } + + // 获取 HttpContext 访问器 + static Func CreateHttpContextAccessor(object holder) + { + var target = Expression.Parameter(typeof(object)); + var convert = Expression.Convert(target, holder.GetType()); + var field = Expression.Field(convert, "Context"); + var convertAsResult = Expression.Convert(field, typeof(HttpContext)); + return Expression.Lambda>(convertAsResult, target).Compile(); + } + } + } +} diff --git a/ARW-net/Infrastructure/AppSettings.cs b/ARW-net/Infrastructure/AppSettings.cs new file mode 100644 index 0000000..ffc7bd3 --- /dev/null +++ b/ARW-net/Infrastructure/AppSettings.cs @@ -0,0 +1,85 @@ +using Microsoft.Extensions.Configuration; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Infrastructure +{ + public class AppSettings + { + static IConfiguration Configuration { get; set; } + + public AppSettings(IConfiguration configuration) + { + Configuration = configuration; + } + + /// + /// 封装要操作的字符 + /// + /// 节点配置 + /// + public static string App(params string[] sections) + { + try + { + if (sections.Any()) + { + return Configuration[string.Join(":", sections)]; + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + + return ""; + } + + /// + /// 递归获取配置信息数组 + /// + /// + /// + /// + public static List App(params string[] sections) + { + List list = new(); + // 引用 Microsoft.Extensions.Configuration.Binder 包 + Configuration.Bind(string.Join(":", sections), list); + return list; + } + public static T Bind(string key, T t) + { + Configuration.Bind(key, t); + + return t; + } + + public static T GetAppConfig(string key, T defaultValue = default) + { + T setting = (T)Convert.ChangeType(Configuration[key], typeof(T)); + var value = setting; + if (setting == null) + value = defaultValue; + return value; + } + + /// + /// 获取配置文件 + /// + /// eg: WeChat:Token + /// + public static string GetConfig(string key) + { + return Configuration[key]; + } + } + + public class CrawlerConfig + { + public string Name { get; set; } + + public List Hosts { get; set; } + } +} diff --git a/ARW-net/Infrastructure/Attribute/AppServiceAttribute.cs b/ARW-net/Infrastructure/Attribute/AppServiceAttribute.cs new file mode 100644 index 0000000..f9ccd02 --- /dev/null +++ b/ARW-net/Infrastructure/Attribute/AppServiceAttribute.cs @@ -0,0 +1,34 @@ +using System; + +namespace Infrastructure.Attribute +{ + /// + /// 参考地址:https://www.cnblogs.com/kelelipeng/p/10643556.html + /// 标记服务 + /// 如何使用? + /// 1、如果服务是本身 直接在类上使用[AppService] + /// 2、如果服务是接口 在类上使用 [AppService(ServiceType = typeof(实现接口))] + /// + [AttributeUsage(AttributeTargets.Class, Inherited = false)] + public class AppServiceAttribute : System.Attribute + { + /// + /// 服务声明周期 + /// 不给默认值的话注册的是AddSingleton + /// + public LifeTime ServiceLifetime { get; set; } = LifeTime.Scoped; + /// + /// 指定服务类型 + /// + public Type ServiceType { get; set; } + /// + /// 是否可以从第一个接口获取服务类型 + /// + public bool InterfaceServiceType { get; set; } + } + + public enum LifeTime + { + Transient, Scoped, Singleton + } +} diff --git a/ARW-net/Infrastructure/Attribute/LogAttribute.cs b/ARW-net/Infrastructure/Attribute/LogAttribute.cs new file mode 100644 index 0000000..20df620 --- /dev/null +++ b/ARW-net/Infrastructure/Attribute/LogAttribute.cs @@ -0,0 +1,35 @@ +using Infrastructure.Enums; + +namespace Infrastructure.Attribute +{ + /// + /// 自定义操作日志记录注解 + /// + public class LogAttribute : System.Attribute + { + public string Title { get; set; } + public BusinessType BusinessType { get; set; } + /// + /// 是否保存请求数据 + /// + public bool IsSaveRequestData { get; set; } = true; + /// + /// 是否保存返回数据 + /// + public bool IsSaveResponseData { get; set; } = true; + + public LogAttribute() { } + + public LogAttribute(string name) + { + Title = name; + } + public LogAttribute(string name, BusinessType businessType, bool saveRequestData = true, bool saveResponseData = true) + { + Title = name; + BusinessType = businessType; + IsSaveRequestData = saveRequestData; + IsSaveResponseData = saveResponseData; + } + } +} diff --git a/ARW-net/Infrastructure/Constant/HttpStatus.cs b/ARW-net/Infrastructure/Constant/HttpStatus.cs new file mode 100644 index 0000000..0bc6d42 --- /dev/null +++ b/ARW-net/Infrastructure/Constant/HttpStatus.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Infrastructure.Constant +{ + public class HttpStatus + { + /// + /// 操作成功 + /// + public static readonly int SUCCESS = 200; + /// + /// 对象创建成功 + /// + public static readonly int CREATED = 201; + + /// + /// 请求已经被接受 + /// + public static readonly int ACCEPTED = 202; + + /// + /// 操作已经执行成功,但是没有返回数据 + /// + public static readonly int NO_CONTENT = 204; + + /// + /// 资源已被移除 + /// + public static readonly int MOVED_PERM = 301; + + /// + /// 重定向 + /// + public static readonly int SEE_OTHER = 303; + + /// + /// 资源没有被修改 + /// + public static readonly int NOT_MODIFIED = 304; + + /** + * 参数列表错误(缺少,格式不匹配) + */ + public static readonly int BAD_REQUEST = 400; + + /// + /// 未授权 + /// + public static readonly int UNAUTHORIZED = 401; + + /** + * 访问受限,授权过期 + */ + public static readonly int FORBIDDEN = 403; + + /** + * 资源,服务未找到 + */ + public static readonly int NOT_FOUND = 404; + + /** + * 不允许的http方法 + */ + public static readonly int BAD_METHOD = 405; + + /** + * 资源冲突,或者资源被锁 + */ + public static readonly int CONFARWCT = 409; + + /** + * 不支持的数据,媒体类型 + */ + public static readonly int UNSUPPORTED_TYPE = 415; + + /** + * 系统内部错误 + */ + public static readonly int ERROR = 500; + + /** + * 接口未实现 + */ + public static readonly int NOT_IMPLEMENTED = 501; + } +} diff --git a/ARW-net/Infrastructure/Constant/HubsConstant.cs b/ARW-net/Infrastructure/Constant/HubsConstant.cs new file mode 100644 index 0000000..d81b7f8 --- /dev/null +++ b/ARW-net/Infrastructure/Constant/HubsConstant.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Infrastructure.Constant +{ + public class HubsConstant + { + private const string V = "receiveNotice"; + public static string ReceiveNotice = V; + public static string OnlineNum = "onlineNum"; + public static string MoreNotice = "moreNotice"; + public static string OnlineUser = "onlineUser"; + } +} diff --git a/ARW-net/Infrastructure/CustomException/CustomException.cs b/ARW-net/Infrastructure/CustomException/CustomException.cs new file mode 100644 index 0000000..19f8fc5 --- /dev/null +++ b/ARW-net/Infrastructure/CustomException/CustomException.cs @@ -0,0 +1,37 @@ +using System; + +namespace Infrastructure +{ + public class CustomException : Exception + { + public int Code { get; set; } + public string Msg { get; set; } + public string LogMsg { get; set; } + + public CustomException(string msg) : base(msg) + { + } + public CustomException(int code, string msg) : base(msg) + { + Code = code; + Msg = msg; + } + + public CustomException(ResultCode resultCode, string msg) : base(msg) + { + Code = (int)resultCode; + } + + /// + /// 自定义异常 + /// + /// + /// + /// 用于记录详细日志到输出介质 + public CustomException(ResultCode resultCode, string msg, object errorMsg) : base(msg) + { + Code = (int)resultCode; + LogMsg = errorMsg.ToString(); + } + } +} \ No newline at end of file diff --git a/ARW-net/Infrastructure/CustomException/ResultCode.cs b/ARW-net/Infrastructure/CustomException/ResultCode.cs new file mode 100644 index 0000000..579bcf9 --- /dev/null +++ b/ARW-net/Infrastructure/CustomException/ResultCode.cs @@ -0,0 +1,43 @@ +using System.ComponentModel; + +namespace Infrastructure +{ + public enum ResultCode + { + [Description("success")] + SUCCESS = 200, + + [Description("参数错误")] + PARAM_ERROR = 101, + + [Description("验证码错误")] + CAPTCHA_ERROR = 103, + + [Description("登录错误")] + LOGIN_ERROR = 105, + + [Description("操作失败")] + FAIL = 1, + + [Description("服务端出错啦")] + GLOBAL_ERROR = 500, + + [Description("自定义异常")] + CUSTOM_ERROR = 110, + + [Description("非法请求")] + INVAARWD_REQUEST = 116, + + [Description("授权失败")] + OAUTH_FAIL = 201, + + [Description("未授权")] + DENY = 401, + + [Description("授权访问失败")] + FORBIDDEN = 403, + + [Description("Bad Request")] + BAD_REQUEST = 400 + } +} diff --git a/ARW-net/Infrastructure/Enums/BusinessType.cs b/ARW-net/Infrastructure/Enums/BusinessType.cs new file mode 100644 index 0000000..771704a --- /dev/null +++ b/ARW-net/Infrastructure/Enums/BusinessType.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Infrastructure.Enums +{ + /** + * 业务操作类型 + * 0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据 + * @author zr + * ry + */ + public enum BusinessType + { + /** + * 其它 + */ + OTHER = 0, + + /** + * 新增 + */ + INSERT = 1, + + /** + * 修改 + */ + UPDATE = 2, + + /** + * 删除 + */ + DELETE = 3, + + /** + * 授权 + */ + GRANT = 4, + + /** + * 导出 + */ + EXPORT = 5, + + /** + * 导入 + */ + IMPORT = 6, + + /** + * 强退 + */ + FORCE = 7, + + /** + * 生成代码 + */ + GENCODE = 8, + + /** + * 清空数据 + */ + CLEAN = 9, + } +} diff --git a/ARW-net/Infrastructure/Enums/StoreType.cs b/ARW-net/Infrastructure/Enums/StoreType.cs new file mode 100644 index 0000000..cbdbdfc --- /dev/null +++ b/ARW-net/Infrastructure/Enums/StoreType.cs @@ -0,0 +1,40 @@ +using System.ComponentModel; + +namespace Infrastructure.Enums +{ + /// + /// 文件存储位置 + /// + public enum StoreType + { + /// + /// 本地 + /// + [Description("本地")] + LOCAL = 1, + + /// + /// 阿里云 + /// + [Description("阿里云")] + AARWYUN = 2, + + /// + /// 腾讯云 + /// + [Description("腾讯云")] + TENCENT = 3, + + /// + /// 七牛 + /// + [Description("七牛云")] + QINIU = 4, + + /// + /// 远程 + /// + [Description("远程")] + REMOTE = 5 + } +} diff --git a/ARW-net/Infrastructure/Extensions/AppServiceExtensions.cs b/ARW-net/Infrastructure/Extensions/AppServiceExtensions.cs new file mode 100644 index 0000000..02aa7da --- /dev/null +++ b/ARW-net/Infrastructure/Extensions/AppServiceExtensions.cs @@ -0,0 +1,71 @@ +using Infrastructure.Attribute; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Linq; +using System.Reflection; + +namespace Infrastructure.Extensions +{ + public static class AppServiceExtensions + { + /// + /// 注册引用程序域中所有有AppService标记的类的服务 + /// + /// + public static void AddAppService(this IServiceCollection services) + { + //var assemblies = AppDomain.CurrentDomain.GetAssemblies(); + + string []cls = new string[] { "ARW.Repository", "ARW.Service", "ARW.Tasks" }; + foreach (var item in cls) + { + Assembly assembly = Assembly.Load(item); + Register(services, assembly); + } + } + + private static void Register(IServiceCollection services, Assembly assembly) + { + foreach (var type in assembly.GetTypes()) + { + var serviceAttribute = type.GetCustomAttribute(); + + if (serviceAttribute != null) + { + var serviceType = serviceAttribute.ServiceType; + //情况1 适用于依赖抽象编程,注意这里只获取第一个 + if (serviceType == null && serviceAttribute.InterfaceServiceType) + { + serviceType = type.GetInterfaces().FirstOrDefault(); + } + //情况2 不常见特殊情况下才会指定ServiceType,写起来麻烦 + if (serviceType == null) + { + serviceType = type; + } + + switch (serviceAttribute.ServiceLifetime) + { + case LifeTime.Singleton: + services.AddSingleton(serviceType, type); + break; + case LifeTime.Scoped: + services.AddScoped(serviceType, type); + break; + case LifeTime.Transient: + services.AddTransient(serviceType, type); + break; + default: + services.AddTransient(serviceType, type); + break; + } + //Console.WriteLine($"注册:{serviceType}"); + } + else + { + //Console.WriteLine($"注册:{serviceType}"); + } + } + } + } +} diff --git a/ARW-net/Infrastructure/Extensions/Extension.Convert.cs b/ARW-net/Infrastructure/Extensions/Extension.Convert.cs new file mode 100644 index 0000000..4710dfd --- /dev/null +++ b/ARW-net/Infrastructure/Extensions/Extension.Convert.cs @@ -0,0 +1,446 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Infrastructure.Extensions +{ + public static partial class Extensions + { + #region 转换为long + /// + /// 将object转换为long,若转换失败,则返回0。不抛出异常。 + /// + /// + /// + public static long ParseToLong(this object obj) + { + try + { + return long.Parse(obj.ToString()); + } + catch + { + return 0L; + } + } + + /// + /// 将object转换为long,若转换失败,则返回指定值。不抛出异常。 + /// + /// + /// + /// + public static long ParseToLong(this string str, long defaultValue) + { + try + { + return long.Parse(str); + } + catch + { + return defaultValue; + } + } + #endregion + + #region 转换为int + /// + /// 将object转换为int,若转换失败,则返回0。不抛出异常。 + /// + /// + /// + public static int ParseToInt(this object str) + { + try + { + return Convert.ToInt32(str); + } + catch + { + return 0; + } + } + + /// + /// 将object转换为int,若转换失败,则返回指定值。不抛出异常。 + /// null返回默认值 + /// + /// + /// + /// + public static int ParseToInt(this object str, int defaultValue) + { + if (str == null) + { + return defaultValue; + } + try + { + return Convert.ToInt32(str); + } + catch + { + return defaultValue; + } + } + #endregion + + #region 转换为short + /// + /// 将object转换为short,若转换失败,则返回0。不抛出异常。 + /// + /// + /// + public static short ParseToShort(this object obj) + { + try + { + return short.Parse(obj.ToString()); + } + catch + { + return 0; + } + } + + /// + /// 将object转换为short,若转换失败,则返回指定值。不抛出异常。 + /// + /// + /// + public static short ParseToShort(this object str, short defaultValue) + { + try + { + return short.Parse(str.ToString()); + } + catch + { + return defaultValue; + } + } + #endregion + + #region 转换为demical + /// + /// 将object转换为demical,若转换失败,则返回指定值。不抛出异常。 + /// + /// + /// + public static decimal ParseToDecimal(this object str, decimal defaultValue) + { + try + { + return decimal.Parse(str.ToString()); + } + catch + { + return defaultValue; + } + } + + /// + /// 将object转换为demical,若转换失败,则返回0。不抛出异常。 + /// + /// + /// + public static decimal ParseToDecimal(this object str) + { + try + { + return decimal.Parse(str.ToString()); + } + catch + { + return 0; + } + } + #endregion + + #region 转化为bool + /// + /// 将object转换为bool,若转换失败,则返回false。不抛出异常。 + /// + /// + /// + public static bool ParseToBool(this object str) + { + try + { + return bool.Parse(str.ToString()); + } + catch + { + return false; + } + } + + /// + /// 将object转换为bool,若转换失败,则返回指定值。不抛出异常。 + /// + /// + /// + public static bool ParseToBool(this object str, bool result) + { + try + { + return bool.Parse(str.ToString()); + } + catch + { + return result; + } + } + #endregion + + #region 转换为float + /// + /// 将object转换为float,若转换失败,则返回0。不抛出异常。 + /// + /// + /// + public static float ParseToFloat(this object str) + { + try + { + return float.Parse(str.ToString()); + } + catch + { + return 0; + } + } + + /// + /// 将object转换为float,若转换失败,则返回指定值。不抛出异常。 + /// + /// + /// + public static float ParseToFloat(this object str, float result) + { + try + { + return float.Parse(str.ToString()); + } + catch + { + return result; + } + } + #endregion + + #region 转换为Guid + /// + /// 将string转换为Guid,若转换失败,则返回Guid.Empty。不抛出异常。 + /// + /// + /// + public static Guid ParseToGuid(this string str) + { + try + { + return new Guid(str); + } + catch + { + return Guid.Empty; + } + } + #endregion + + #region 转换为DateTime + /// + /// 将string转换为DateTime,若转换失败,则返回日期最小值。不抛出异常。 + /// + /// + /// + public static DateTime ParseToDateTime(this string str) + { + try + { + if (string.IsNullOrWhiteSpace(str)) + { + return DateTime.MinValue; + } + if (str.Contains("-") || str.Contains("/")) + { + return DateTime.Parse(str); + } + else + { + int length = str.Length; + switch (length) + { + case 4: + return DateTime.ParseExact(str, "yyyy", System.Globalization.CultureInfo.CurrentCulture); + case 6: + return DateTime.ParseExact(str, "yyyyMM", System.Globalization.CultureInfo.CurrentCulture); + case 8: + return DateTime.ParseExact(str, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture); + case 10: + return DateTime.ParseExact(str, "yyyyMMddHH", System.Globalization.CultureInfo.CurrentCulture); + case 12: + return DateTime.ParseExact(str, "yyyyMMddHHmm", System.Globalization.CultureInfo.CurrentCulture); + case 14: + return DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture); + default: + return DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture); + } + } + } + catch + { + return DateTime.MinValue; + } + } + + /// + /// 将string转换为DateTime,若转换失败,则返回默认值。 + /// + /// + /// + /// + public static DateTime ParseToDateTime(this string str, DateTime? defaultValue) + { + try + { + if (string.IsNullOrWhiteSpace(str)) + { + return defaultValue.GetValueOrDefault(); + } + if (str.Contains("-") || str.Contains("/")) + { + return DateTime.Parse(str); + } + else + { + int length = str.Length; + switch (length) + { + case 4: + return DateTime.ParseExact(str, "yyyy", System.Globalization.CultureInfo.CurrentCulture); + case 6: + return DateTime.ParseExact(str, "yyyyMM", System.Globalization.CultureInfo.CurrentCulture); + case 8: + return DateTime.ParseExact(str, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture); + case 10: + return DateTime.ParseExact(str, "yyyyMMddHH", System.Globalization.CultureInfo.CurrentCulture); + case 12: + return DateTime.ParseExact(str, "yyyyMMddHHmm", System.Globalization.CultureInfo.CurrentCulture); + case 14: + return DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture); + default: + return DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture); + } + } + } + catch + { + return defaultValue.GetValueOrDefault(); + } + } + #endregion + + #region 转换为string + /// + /// 将object转换为string,若转换失败,则返回""。不抛出异常。 + /// + /// + /// + public static string ParseToString(this object obj) + { + try + { + if (obj == null) + { + return string.Empty; + } + else + { + return obj.ToString(); + } + } + catch + { + return string.Empty; + } + } + public static string ParseToStrings(this object obj) + { + try + { + var list = obj as IEnumerable; + if (list != null) + { + return string.Join(",", list); + } + else + { + return obj.ToString(); + } + } + catch + { + return string.Empty; + } + + } + #endregion + + #region 转换为double + /// + /// 将object转换为double,若转换失败,则返回0。不抛出异常。 + /// + /// + /// + public static double ParseToDouble(this object obj) + { + try + { + return double.Parse(obj.ToString()); + } + catch + { + return 0; + } + } + + /// + /// 将object转换为double,若转换失败,则返回指定值。不抛出异常。 + /// + /// + /// + /// + public static double ParseToDouble(this object str, double defaultValue) + { + try + { + return double.Parse(str.ToString()); + } + catch + { + return defaultValue; + } + } + #endregion + + #region 强制转换类型 + /// + /// 强制转换类型 + /// + /// + /// + /// + public static IEnumerable CastSuper(this IEnumerable source) + { + foreach (object item in source) + { + yield return (TResult)Convert.ChangeType(item, typeof(TResult)); + } + } + #endregion + } +} diff --git a/ARW-net/Infrastructure/Extensions/Extension.Enum.cs b/ARW-net/Infrastructure/Extensions/Extension.Enum.cs new file mode 100644 index 0000000..72710ff --- /dev/null +++ b/ARW-net/Infrastructure/Extensions/Extension.Enum.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +//using Newtonsoft.Json; + +namespace Infrastructure.Extensions +{ + public static partial class Extensions + { + #region 枚举成员转成dictionary类型 + /// + /// 转成dictionary类型 + /// + /// + /// + public static Dictionary EnumToDictionary(this Type enumType) + { + Dictionary dictionary = new Dictionary(); + Type typeDescription = typeof(DescriptionAttribute); + FieldInfo[] fields = enumType.GetFields(); + int sValue = 0; + string sText = string.Empty; + foreach (FieldInfo field in fields) + { + if (field.FieldType.IsEnum) + { + sValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)); + object[] arr = field.GetCustomAttributes(typeDescription, true); + if (arr.Length > 0) + { + DescriptionAttribute da = (DescriptionAttribute)arr[0]; + sText = da.Description; + } + else + { + sText = field.Name; + } + dictionary.Add(sValue, sText); + } + } + return dictionary; + } + /// + /// 枚举成员转成键值对Json字符串 + /// + /// + /// + //public static string EnumToDictionaryString(this Type enumType) + //{ + // List> dictionaryList = EnumToDictionary(enumType).ToList(); + // var sJson = JsonConvert.SerializeObject(dictionaryList); + // return sJson; + //} + #endregion + + #region 获取枚举的描述 + /// + /// 获取枚举值对应的描述 + /// + /// + /// + public static string GetDescription(this System.Enum enumType) + { + FieldInfo EnumInfo = enumType.GetType().GetField(enumType.ToString()); + if (EnumInfo != null) + { + DescriptionAttribute[] EnumAttributes = (DescriptionAttribute[])EnumInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); + if (EnumAttributes.Length > 0) + { + return EnumAttributes[0].Description; + } + } + return enumType.ToString(); + } + #endregion + + #region 根据值获取枚举的描述 + public static string GetDescriptionByEnum(this object obj) + { + var tEnum = System.Enum.Parse(typeof(T), obj.ParseToString()) as System.Enum; + var description = tEnum.GetDescription(); + return description; + } + #endregion + } +} diff --git a/ARW-net/Infrastructure/Extensions/Extension.Exception.cs b/ARW-net/Infrastructure/Extensions/Extension.Exception.cs new file mode 100644 index 0000000..4af781d --- /dev/null +++ b/ARW-net/Infrastructure/Extensions/Extension.Exception.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Infrastructure.Extensions +{ + public static partial class Extensions + { + public static Exception GetOriginalException(this Exception ex) + { + if (ex.InnerException == null) return ex; + + return ex.InnerException.GetOriginalException(); + } + } +} diff --git a/ARW-net/Infrastructure/Extensions/Extension.Linq.cs b/ARW-net/Infrastructure/Extensions/Extension.Linq.cs new file mode 100644 index 0000000..0c23a71 --- /dev/null +++ b/ARW-net/Infrastructure/Extensions/Extension.Linq.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace Infrastructure.Extensions +{ + public static class LinqExtensions + { + public static Expression Property(this Expression expression, string propertyName) + { + return Expression.Property(expression, propertyName); + } + public static Expression AndAlso(this Expression left, Expression right) + { + return Expression.AndAlso(left, right); + } + public static Expression Call(this Expression instance, string methodName, params Expression[] arguments) + { + return Expression.Call(instance, instance.Type.GetMethod(methodName), arguments); + } + public static Expression GreaterThan(this Expression left, Expression right) + { + return Expression.GreaterThan(left, right); + } + public static Expression ToLambda(this Expression body, params ParameterExpression[] parameters) + { + return Expression.Lambda(body, parameters); + } + + public static Expression> True() { return param => true; } + + public static Expression> False() { return param => false; } + + /// + /// 组合And + /// + /// + public static Expression> And(this Expression> first, Expression> second) + { + return first.Compose(second, Expression.AndAlso); + } + /// + /// 组合Or + /// + /// + public static Expression> Or(this Expression> first, Expression> second) + { + return first.Compose(second, Expression.OrElse); + } + + /// + /// Combines the first expression with the second using the specified merge function. + /// + static Expression Compose(this Expression first, Expression second, Func merge) + { + var map = first.Parameters + .Select((f, i) => new { f, s = second.Parameters[i] }) + .ToDictionary(p => p.s, p => p.f); + var secondBody = ParameterRebinder.ReplaceParameters(map, second.Body); + return Expression.Lambda(merge(first.Body, secondBody), first.Parameters); + } + + /// + /// ParameterRebinder + /// + private class ParameterRebinder : ExpressionVisitor + { + /// + /// The ParameterExpression map + /// + readonly Dictionary map; + /// + /// Initializes a new instance of the class. + /// + /// The map. + ParameterRebinder(Dictionary map) + { + this.map = map ?? new Dictionary(); + } + /// + /// Replaces the parameters. + /// + /// The map. + /// The exp. + /// Expression + public static Expression ReplaceParameters(Dictionary map, Expression exp) + { + return new ParameterRebinder(map).Visit(exp); + } + /// + /// Visits the parameter. + /// + /// The p. + /// Expression + protected override Expression VisitParameter(ParameterExpression p) + { + ParameterExpression replacement; + + if (map.TryGetValue(p, out replacement)) + { + p = replacement; + } + return base.VisitParameter(p); + } + } + } +} diff --git a/ARW-net/Infrastructure/Extensions/Extension.Validate.cs b/ARW-net/Infrastructure/Extensions/Extension.Validate.cs new file mode 100644 index 0000000..de3c9c9 --- /dev/null +++ b/ARW-net/Infrastructure/Extensions/Extension.Validate.cs @@ -0,0 +1,44 @@ +//using Microsoft.AspNetCore.Http; + +namespace Infrastructure.Extensions +{ + public static partial class Extensions + { + public static bool IsEmpty(this object value) + { + if (value != null && !string.IsNullOrEmpty(value.ParseToString())) + { + return false; + } + else + { + return true; + } + } + public static bool IsNotEmpty(this object value) + { + return !IsEmpty(value); + } + public static bool IsNullOrZero(this object value) + { + if (value == null || value.ParseToString().Trim() == "0") + { + return true; + } + else + { + return false; + } + } + + //public static bool IsAjaxRequest(this HttpRequest request) + //{ + // if (request == null) + // throw new ArgumentNullException("request"); + + // if (request.Headers != null) + // return request.Headers["X-Requested-With"] == "XMLHttpRequest"; + // return false; + //} + } +} diff --git a/ARW-net/Infrastructure/Extensions/StringExtension.cs b/ARW-net/Infrastructure/Extensions/StringExtension.cs new file mode 100644 index 0000000..d00fd7b --- /dev/null +++ b/ARW-net/Infrastructure/Extensions/StringExtension.cs @@ -0,0 +1,232 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace Infrastructure.Extensions +{ + public static class StringExtension + { + + /// + /// SQL条件拼接 + /// + /// + /// + /// + public static string If(this string str, bool condition) + { + return condition ? str : string.Empty; + } + /// + /// 判断是否为空 + /// + /// + /// + public static bool IfNotEmpty(this string str) + { + return !string.IsNullOrEmpty(str); + } + + /// + /// 注意:如果替换的旧值中有特殊符号,替换将会失败,解决办法 例如特殊符号是“(”: 要在调用本方法前加oldValue=oldValue.Replace("(","//("); + /// + /// + /// + /// + /// + public static string ReplaceFirst(this string input, string oldValue, string newValue) + { + Regex regEx = new Regex(oldValue, RegexOptions.Multiline); + return regEx.Replace(input, newValue == null ? "" : newValue, 1); + } + + /// + /// 骆驼峰转下划线 + /// + /// + /// + public static string ToSmallCamelCase(string name) + { + var stringBuilder = new StringBuilder(); + stringBuilder.Append(name.Substring(0, 1).ToLower()); + + for (var i = 0; i < name.Length; i++) + { + if (i == 0) + { + stringBuilder.Append(name.Substring(0, 1).ToLower()); + } + else + { + if (name[i] >= 'A' && name[i] <= 'Z') + { + stringBuilder.Append($"_{name.Substring(i, 1).ToLower()}"); + } + else + { + stringBuilder.Append(name[i]); + } + } + } + + return stringBuilder.ToString(); + } + + /// + /// 下划线命名转驼峰命名 + /// + /// + /// + public static string UnderScoreToCamelCase(this string underscore) + { + string[] ss = underscore.Split("_"); + if (ss.Length == 1) + { + return underscore; + } + + StringBuilder sb = new StringBuilder(); + sb.Append(ss[0]); + for (int i = 1; i < ss.Length; i++) + { + sb.Append(ss[i].FirstUpperCase()); + } + + return sb.ToString(); + } + + /// + /// 首字母转大写 + /// + /// + /// + public static string FirstUpperCase(this string str) + { + return string.IsNullOrEmpty(str) ? str : str.Substring(0, 1).ToUpper() + str[1..]; + } + + /// + /// 首字母转小写 + /// + /// + /// + public static string FirstLowerCase(this string str) + { + return string.IsNullOrEmpty(str) ? str : str.Substring(0, 1).ToLower() + str[1..]; + } + + /// + /// 截取指定字符串中间内容 + /// + /// + /// + /// + /// + public static string SubstringBetween(this string sourse, string startstr, string endstr) + { + string result = string.Empty; + int startindex, endindex; + try + { + startindex = sourse.IndexOf(startstr); + if (startindex == -1) + return result; + string tmpstr = sourse.Substring(startindex + startstr.Length); + endindex = tmpstr.IndexOf(endstr); + if (endindex == -1) + return result; + result = tmpstr.Remove(endindex); + } + catch (Exception ex) + { + Console.WriteLine("MidStrEx Err:" + ex.Message); + } + return result; + } + + /// + /// 转换为Pascal风格-每一个单词的首字母大写 + /// + /// 字段名 + /// 分隔符 + /// + public static string ConvertToPascal(this string fieldName, string fieldDelimiter) + { + string result = string.Empty; + if (fieldName.Contains(fieldDelimiter)) + { + //全部小写 + string[] array = fieldName.ToLower().Split(fieldDelimiter.ToCharArray()); + foreach (var t in array) + { + //首字母大写 + result += t.Substring(0, 1).ToUpper() + t[1..]; + } + } + else if (string.IsNullOrWhiteSpace(fieldName)) + { + result = fieldName; + } + else if (fieldName.Length == 1) + { + result = fieldName.ToUpper(); + } + else if (fieldName.Length == CountUpper(fieldName)) + { + result = fieldName.Substring(0, 1).ToUpper() + fieldName[1..].ToLower(); + } + else + { + result = fieldName.Substring(0, 1).ToUpper() + fieldName[1..]; + } + return result; + } + + /// + /// 大写字母个数 + /// + /// + /// + public static int CountUpper(this string str) + { + int count1 = 0; + char[] chars = str.ToCharArray(); + foreach (char num in chars) + { + if (num >= 'A' && num <= 'Z') + { + count1++; + } + //else if (num >= 'a' && num <= 'z') + //{ + // count2++; + //} + } + return count1; + } + + /// + /// 转换为Camel风格-第一个单词小写,其后每个单词首字母大写 + /// + /// 字段名 + /// 分隔符 + /// + public static string ConvertToCamel(this string fieldName, string fieldDelimiter) + { + //先Pascal + string result = ConvertToPascal(fieldName, fieldDelimiter); + //然后首字母小写 + if (result.Length == 1) + { + result = result.ToLower(); + } + else + { + result = result.Substring(0, 1).ToLower() + result[1..]; + } + + return result; + } + } +} diff --git a/ARW-net/Infrastructure/GlobalConstant.cs b/ARW-net/Infrastructure/GlobalConstant.cs new file mode 100644 index 0000000..25fc8d0 --- /dev/null +++ b/ARW-net/Infrastructure/GlobalConstant.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Infrastructure +{ + /// + /// 全局静态常量 + /// + public class GlobalConstant + { + /// + /// 管理员权限 + /// + public static string AdminPerm = "*:*:*"; + /// + /// 管理员角色 + /// + public static string AdminRole = "admin"; + /// + /// 开发版本API映射路径 + /// + public static string DevApiProxy = "/dev-api/"; + /// + /// 用户权限缓存key + /// + public static string UserPermKEY = "CACHE-USER-PERM"; + + /// + /// 欢迎语 + /// + public static string[] WelcomeMessages = new string[] { + "祝你开心每一天!", + "忙碌了一周,停一停脚步!", + "世间美好,与你环环相扣!", + "永远相信美好的事情即将发生!", + "每一天,遇见更好的自己!", + "保持热爱,奔赴山海!", + "生活明朗,万物可爱!", + "愿每一天醒来都是美好的开始!", + "没有希望的地方,就没有奋斗!", + "我最珍贵的时光都行走在路上!", + "成功,往往住在失败的隔壁!", + "人只要不失去方向,就不会失去自己!", + "每条堵住的路,都有一个出口!", + "没有谁能击垮你,除非你自甘堕落!", + "微笑着的人并非没有痛苦!", + "生活变的再糟糕,也不妨碍我变得更好!", + "你要悄悄努力,然后惊艳众人!", + "人与人之间最大的信任是精诚相见", + "人生就像爬坡,要一步一步来。", + "今天的目标完成了吗?", + "高效工作,告别996", + "销售是从别人拒绝开始的!" + }; + } +} diff --git a/ARW-net/Infrastructure/Helper/AssemblyUtils.cs b/ARW-net/Infrastructure/Helper/AssemblyUtils.cs new file mode 100644 index 0000000..3934851 --- /dev/null +++ b/ARW-net/Infrastructure/Helper/AssemblyUtils.cs @@ -0,0 +1,36 @@ +using Microsoft.Extensions.DependencyModel; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace Infrastructure.Helper +{ + public static class AssemblyUtils + { + /// + /// 获取应用中的所有程序集 + /// + /// + public static IEnumerable GetAssemblies() + { + var compilationLibrary = DependencyContext.Default + .CompileLibraries + .Where(x => !x.Serviceable && x.Type == "project") + .ToList(); + return compilationLibrary.Select(p => Assembly.Load(new AssemblyName(p.Name))); + } + + /// + /// 获取应用中的所有Type + /// + /// + public static IEnumerable GetAllTypes() + { + var assemblies = GetAssemblies(); + return assemblies.SelectMany(p => p.GetTypes()); + } + } +} diff --git a/ARW-net/Infrastructure/Helper/ComputerHelper.cs b/ARW-net/Infrastructure/Helper/ComputerHelper.cs new file mode 100644 index 0000000..52fa318 --- /dev/null +++ b/ARW-net/Infrastructure/Helper/ComputerHelper.cs @@ -0,0 +1,261 @@ +using Infrastructure.Extensions; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace Infrastructure +{ + public class ComputerHelper + { + /// + /// 内存使用情况 + /// + /// + public static MemoryMetrics GetComputerInfo() + { + try + { + MemoryMetricsClient client = new(); + MemoryMetrics memoryMetrics = IsUnix() ? client.GetUnixMetrics() : client.GetWindowsMetrics(); + + memoryMetrics.FreeRam = Math.Round(memoryMetrics.Free / 1024, 2) + "GB"; + memoryMetrics.UsedRam = Math.Round(memoryMetrics.Used / 1024, 2) + "GB"; + memoryMetrics.TotalRAM = Math.Round(memoryMetrics.Total / 1024, 2) + "GB"; + memoryMetrics.RAMRate = Math.Ceiling(100 * memoryMetrics.Used / memoryMetrics.Total).ToString() + "%"; + memoryMetrics.CPURate = Math.Ceiling(GetCPURate().ParseToDouble()) + "%"; + return memoryMetrics; + } + catch (Exception ex) + { + Console.WriteLine("获取内存使用出错,msg=" + ex.Message + "," + ex.StackTrace); + } + return new MemoryMetrics(); + } + + /// + /// 获取内存大小 + /// + /// + public static List GetDiskInfos() + { + List diskInfos = new(); + + if (IsUnix()) + { + try + { + string output = ShellHelper.Bash("df -m / | awk '{print $2,$3,$4,$5,$6}'"); + var arr = output.Split('\n', StringSplitOptions.RemoveEmptyEntries); + if (arr.Length == 0) return diskInfos; + + var rootDisk = arr[1].Split(' ', (char)StringSplitOptions.RemoveEmptyEntries); + if (rootDisk == null || rootDisk.Length == 0) + { + return diskInfos; + } + DiskInfo diskInfo = new() + { + DiskName = "/", + TotalSize = long.Parse(rootDisk[0]) / 1024, + Used = long.Parse(rootDisk[1]) / 1024, + AvailableFreeSpace = long.Parse(rootDisk[2]) / 1024, + AvailablePercent = decimal.Parse(rootDisk[3].Replace("%", "")) + }; + diskInfos.Add(diskInfo); + } + catch (Exception ex) + { + Console.WriteLine("获取磁盘信息出错了" + ex.Message); + } + } + else + { + var driv = DriveInfo.GetDrives(); + foreach (var item in driv) + { + try + { + var obj = new DiskInfo() + { + DiskName = item.Name, + TypeName = item.DriveType.ToString(), + TotalSize = item.TotalSize / 1024 / 1024 / 1024, + AvailableFreeSpace = item.AvailableFreeSpace / 1024 / 1024 / 1024, + }; + obj.Used = obj.TotalSize - obj.AvailableFreeSpace; + obj.AvailablePercent = decimal.Ceiling(obj.Used / (decimal)obj.TotalSize * 100); + diskInfos.Add(obj); + } + catch (Exception ex) + { + Console.WriteLine("获取磁盘信息出错了" + ex.Message); + continue; + } + } + } + + return diskInfos; + } + + public static bool IsUnix() + { + var isUnix = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + return isUnix; + } + + public static string GetCPURate() + { + string cpuRate; + if (IsUnix()) + { + string output = ShellHelper.Bash("top -b -n1 | grep \"Cpu(s)\" | awk '{print $2 + $4}'"); + cpuRate = output.Trim(); + } + else + { + string output = ShellHelper.Cmd("wmic", "cpu get LoadPercentage"); + cpuRate = output.Replace("LoadPercentage", string.Empty).Trim(); + } + return cpuRate; + } + + /// + /// 获取系统运行时间 + /// + /// + public static string GetRunTime() + { + string runTime = string.Empty; + try + { + if (IsUnix()) + { + string output = ShellHelper.Bash("uptime -s").Trim(); + runTime = DateTimeHelper.FormatTime((DateTime.Now - output.ParseToDateTime()).TotalMilliseconds.ToString().Split('.')[0].ParseToLong()); + } + else + { + string output = ShellHelper.Cmd("wmic", "OS get LastBootUpTime/Value"); + string[] outputArr = output.Split('=', (char)StringSplitOptions.RemoveEmptyEntries); + if (outputArr.Length == 2) + { + runTime = DateTimeHelper.FormatTime((DateTime.Now - outputArr[1].Split('.')[0].ParseToDateTime()).TotalMilliseconds.ToString().Split('.')[0].ParseToLong()); + } + } + } + catch (Exception ex) + { + Console.WriteLine("获取runTime出错" + ex.Message); + } + return runTime; + } + } + + /// + /// 内存信息 + /// + public class MemoryMetrics + { + [JsonIgnore] + public double Total { get; set; } + [JsonIgnore] + public double Used { get; set; } + [JsonIgnore] + public double Free { get; set; } + + public string UsedRam { get; set; } + /// + /// CPU使用率% + /// + public string CPURate { get; set; } + /// + /// 总内存 GB + /// + public string TotalRAM { get; set; } + /// + /// 内存使用率 % + /// + public string RAMRate { get; set; } + /// + /// 空闲内存 + /// + public string FreeRam { get; set; } + } + + public class DiskInfo + { + /// + /// 磁盘名 + /// + public string DiskName { get; set; } + public string TypeName { get; set; } + public long TotalFree { get; set; } + public long TotalSize { get; set; } + /// + /// 已使用 + /// + public long Used { get; set; } + /// + /// 可使用 + /// + public long AvailableFreeSpace { get; set; } + public decimal AvailablePercent { get; set; } + } + + public class MemoryMetricsClient + { + #region 获取内存信息 + + /// + /// windows系统获取内存信息 + /// + /// + public MemoryMetrics GetWindowsMetrics() + { + string output = ShellHelper.Cmd("wmic", "OS get FreePhysicalMemory,TotalVisibleMemorySize /Value"); + var metrics = new MemoryMetrics(); + var lines = output.Trim().Split('\n', (char)StringSplitOptions.RemoveEmptyEntries); + + if (lines.Length <= 0) return metrics; + + var freeMemoryParts = lines[0].Split('=', (char)StringSplitOptions.RemoveEmptyEntries); + var totalMemoryParts = lines[1].Split('=', (char)StringSplitOptions.RemoveEmptyEntries); + + metrics.Total = Math.Round(double.Parse(totalMemoryParts[1]) / 1024, 0); + metrics.Free = Math.Round(double.Parse(freeMemoryParts[1]) / 1024, 0);//m + metrics.Used = metrics.Total - metrics.Free; + + return metrics; + } + + /// + /// Unix系统获取 + /// + /// + public MemoryMetrics GetUnixMetrics() + { + string output = ShellHelper.Bash("free -m | awk '{print $2,$3,$4,$5,$6}'"); + var metrics = new MemoryMetrics(); + var lines = output.Split('\n', (char)StringSplitOptions.RemoveEmptyEntries); + + if (lines.Length <= 0) return metrics; + + if (lines != null && lines.Length > 0) + { + var memory = lines[1].Split(' ', (char)StringSplitOptions.RemoveEmptyEntries); + if (memory.Length >= 3) + { + metrics.Total = double.Parse(memory[0]); + metrics.Used = double.Parse(memory[1]); + metrics.Free = double.Parse(memory[2]);//m + } + } + return metrics; + } + #endregion + } +} \ No newline at end of file diff --git a/ARW-net/Infrastructure/Helper/DateTimeHelper.cs b/ARW-net/Infrastructure/Helper/DateTimeHelper.cs new file mode 100644 index 0000000..37aa6b9 --- /dev/null +++ b/ARW-net/Infrastructure/Helper/DateTimeHelper.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Infrastructure +{ + public class DateTimeHelper + { + /// + /// + /// + /// + /// + public static DateTime GetBeginTime(DateTime? dateTime, int days = 0) + { + if (dateTime == DateTime.MinValue || dateTime == null) + { + return DateTime.Now.AddDays(days); + } + return dateTime ?? DateTime.Now; + } + #region 时间戳转换 + + /// + /// 时间戳转本地时间-时间戳精确到秒 + /// + public static DateTime ToLocalTimeDateBySeconds(long unix) + { + var dto = DateTimeOffset.FromUnixTimeSeconds(unix); + return dto.ToLocalTime().DateTime; + } + + /// + /// 时间转时间戳Unix-时间戳精确到秒 + /// + public static long ToUnixTimestampBySeconds(DateTime dt) + { + DateTimeOffset dto = new DateTimeOffset(dt); + return dto.ToUnixTimeSeconds(); + } + + /// + /// 时间戳转本地时间-时间戳精确到毫秒 + /// + public static DateTime ToLocalTimeDateByMilliseconds(long unix) + { + var dto = DateTimeOffset.FromUnixTimeMilliseconds(unix); + return dto.ToLocalTime().DateTime; + } + + /// + /// 时间转时间戳Unix-时间戳精确到毫秒 + /// + public static long ToUnixTimestampByMilliseconds(DateTime dt) + { + DateTimeOffset dto = new DateTimeOffset(dt); + return dto.ToUnixTimeMilliseconds(); + } + + #endregion + + #region 毫秒转天时分秒 + /// + /// 毫秒转天时分秒 + /// + /// + /// + public static string FormatTime(long ms) + { + int ss = 1000; + int mi = ss * 60; + int hh = mi * 60; + int dd = hh * 24; + + long day = ms / dd; + long hour = (ms - day * dd) / hh; + long minute = (ms - day * dd - hour * hh) / mi; + long second = (ms - day * dd - hour * hh - minute * mi) / ss; + long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss; + + string sDay = day < 10 ? "0" + day : "" + day; //天 + string sHour = hour < 10 ? "0" + hour : "" + hour;//小时 + string sMinute = minute < 10 ? "0" + minute : "" + minute;//分钟 + string sSecond = second < 10 ? "0" + second : "" + second;//秒 + string sMilliSecond = milliSecond < 10 ? "0" + milliSecond : "" + milliSecond;//毫秒 + sMilliSecond = milliSecond < 100 ? "0" + sMilliSecond : "" + sMilliSecond; + + return string.Format("{0} 天 {1} 小时 {2} 分 {3} 秒", sDay, sHour, sMinute, sSecond); + } + #endregion + + #region 获取unix时间戳 + /// + /// 获取unix时间戳 + /// + /// + /// + public static long GetUnixTimeStamp(DateTime dt) + { + long unixTime = ((DateTimeOffset)dt).ToUnixTimeMilliseconds(); + return unixTime; + } + #endregion + + #region 获取日期天的最小时间 + public static DateTime GetDayMinDate(DateTime dt) + { + DateTime min = new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0); + return min; + } + #endregion + + #region 获取日期天的最大时间 + public static DateTime GetDayMaxDate(DateTime dt) + { + DateTime max = new DateTime(dt.Year, dt.Month, dt.Day, 23, 59, 59); + return max; + } + #endregion + + #region 获取日期天的最大时间 + public static string FormatDateTime(DateTime? dt) + { + if (dt != null) + { + if (dt.Value.Year == DateTime.Now.Year) + { + return dt.Value.ToString("MM-dd HH:mm"); + } + else + { + return dt.Value.ToString("yyyy-MM-dd HH:mm"); + } + } + return string.Empty; + } + #endregion + } +} diff --git a/ARW-net/Infrastructure/Helper/FileUtil.cs b/ARW-net/Infrastructure/Helper/FileUtil.cs new file mode 100644 index 0000000..0d85003 --- /dev/null +++ b/ARW-net/Infrastructure/Helper/FileUtil.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace Infrastructure +{ + public class FileUtil + { + /// + /// 按时间来创建文件夹 + /// + /// + /// eg: /{yourPath}/2020/11/3/ + public static string GetdirPath(string path = "") + { + DateTime date = DateTime.Now; + string timeDir = date.ToString("yyyyMMdd");// date.ToString("yyyyMM/dd/HH/"); + + if (!string.IsNullOrEmpty(path)) + { + timeDir = Path.Combine(path, timeDir); + } + return timeDir; + } + + /// + /// 取文件名的MD5值(16位) + /// + /// 文件名,不包括扩展名 + /// + public static string HashFileName(string str = null) + { + if (string.IsNullOrEmpty(str)) + { + str = Guid.NewGuid().ToString(); + } + MD5 md5 = MD5.Create(); + return BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(str)), 4, 8).Replace("-", ""); + } + } +} diff --git a/ARW-net/Infrastructure/Helper/HttpHelper.cs b/ARW-net/Infrastructure/Helper/HttpHelper.cs new file mode 100644 index 0000000..21d6233 --- /dev/null +++ b/ARW-net/Infrastructure/Helper/HttpHelper.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Web; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; + +namespace Infrastructure +{ + public class HttpHelper + { + /// + /// 发起POST同步请求 + /// + /// + /// + /// + /// application/xml、application/json、application/text、application/x-www-form-urlencoded + /// 填充消息头 + /// + public static string HttpPost(string url, string postData = null, string contentType = null, int timeOut = 30, Dictionary headers = null) + { + postData = postData ?? ""; + using (HttpClient client = new HttpClient()) + { + if (headers != null) + { + foreach (var header in headers) + client.DefaultRequestHeaders.Add(header.Key, header.Value); + } + using (HttpContent httpContent = new StringContent(postData, Encoding.UTF8)) + { + if (contentType != null) + httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType); + + HttpResponseMessage response = client.PostAsync(url, httpContent).Result; + return response.Content.ReadAsStringAsync().Result; + } + } + } + + + /// + /// 发起POST异步请求 + /// + /// + /// + /// application/xml、application/json、application/text、application/x-www-form-urlencoded + /// 填充消息头 + /// + public static async Task HttpPostAsync(string url, string postData = null, string contentType = null, int timeOut = 30, Dictionary headers = null) + { + postData = postData ?? ""; + using (HttpClient client = new HttpClient()) + { + client.Timeout = new TimeSpan(0, 0, timeOut); + if (headers != null) + { + foreach (var header in headers) + client.DefaultRequestHeaders.Add(header.Key, header.Value); + } + using (HttpContent httpContent = new StringContent(postData, Encoding.UTF8)) + { + if (contentType != null) + httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType); + + HttpResponseMessage response = await client.PostAsync(url, httpContent); + return await response.Content.ReadAsStringAsync(); + } + } + } + + /// + /// 发起GET同步请求 + /// + /// + /// + /// + /// + public static string HttpGet(string url, Dictionary headers = null) + { + using (HttpClient client = new HttpClient()) + { + if (headers != null) + { + foreach (var header in headers) + client.DefaultRequestHeaders.Add(header.Key, header.Value); + } + else + { + client.DefaultRequestHeaders.Add("ContentType", "application/x-www-form-urlencoded"); + client.DefaultRequestHeaders.Add("UserAgent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); + } + try + { + HttpResponseMessage response = client.GetAsync(url).Result; + return response.Content.ReadAsStringAsync().Result; + } + catch (Exception ex) + { + //TODO 打印日志 + Console.WriteLine($"[Http请求出错]{url}|{ex.Message}"); + } + return ""; + } + } + + /// + /// 发起GET异步请求 + /// + /// + /// + /// + /// + public static async Task HttpGetAsync(string url, Dictionary headers = null) + { + using (HttpClient client = new HttpClient()) + { + if (headers != null) + { + foreach (var header in headers) + client.DefaultRequestHeaders.Add(header.Key, header.Value); + } + HttpResponseMessage response = await client.GetAsync(url); + return await response.Content.ReadAsStringAsync(); + } + } + + } +} diff --git a/ARW-net/Infrastructure/Helper/ShellHelper.cs b/ARW-net/Infrastructure/Helper/ShellHelper.cs new file mode 100644 index 0000000..6c56ad1 --- /dev/null +++ b/ARW-net/Infrastructure/Helper/ShellHelper.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +namespace Infrastructure +{ + public class ShellHelper + { + /// + /// linux 系统命令 + /// + /// + /// + public static string Bash(string command) + { + var escapedArgs = command.Replace("\"", "\\\""); + var process = new Process() + { + StartInfo = new ProcessStartInfo + { + FileName = "/bin/bash", + Arguments = $"-c \"{escapedArgs}\"", + RedirectStandardOutput = true, + UseShellExecute = false, + CreateNoWindow = true, + } + }; + process.Start(); + string result = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + process.Dispose(); + return result; + } + + /// + /// windows系统命令 + /// + /// + /// + /// + public static string Cmd(string fileName, string args) + { + string output = string.Empty; + + var info = new ProcessStartInfo(); + info.FileName = fileName; + info.Arguments = args; + info.RedirectStandardOutput = true; + + using (var process = Process.Start(info)) + { + output = process.StandardOutput.ReadToEnd(); + } + return output; + } + } +} diff --git a/ARW-net/Infrastructure/Infrastructure.csproj b/ARW-net/Infrastructure/Infrastructure.csproj new file mode 100644 index 0000000..998c34b --- /dev/null +++ b/ARW-net/Infrastructure/Infrastructure.csproj @@ -0,0 +1,19 @@ + + + + net6.0 + + + + + + + + + + + + + + + diff --git a/ARW-net/Infrastructure/InternalApp.cs b/ARW-net/Infrastructure/InternalApp.cs new file mode 100644 index 0000000..78e24d9 --- /dev/null +++ b/ARW-net/Infrastructure/InternalApp.cs @@ -0,0 +1,30 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using System; + +namespace Infrastructure +{ + public static class InternalApp + { + /// + /// 应用服务 + /// + public static IServiceProvider ServiceProvider; + + /// + /// 全局配置构建器 + /// + //public static IConfigurationBuilder ConfigurationBuilder; + + /// + /// 获取Web主机环境 + /// + //internal static IWebHostEnvironment WebHostEnvironment; + + /// + /// 获取泛型主机环境 + /// + //public static IHostEnvironment HostEnvironment; + } +} diff --git a/ARW-net/Infrastructure/Model/ApiResult.cs b/ARW-net/Infrastructure/Model/ApiResult.cs new file mode 100644 index 0000000..d322029 --- /dev/null +++ b/ARW-net/Infrastructure/Model/ApiResult.cs @@ -0,0 +1,125 @@ +using Infrastructure.Constant; +using Newtonsoft.Json; + +namespace Infrastructure.Model +{ + public class ApiResult + { + public int Code { get; set; } + public string Msg { get; set; } + /// + /// 如果data值为null,则忽略序列化将不会返回data字段 + /// + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public object Data { get; set; } + + /// + /// 初始化一个新创建的APIResult对象,使其表示一个空消息 + /// + public ApiResult() + { + } + + /// + /// 初始化一个新创建的 ApiResult 对象 + /// + /// + /// + public ApiResult(int code, string msg) + { + Code = code; + Msg = msg; + } + + /// + /// 初始化一个新创建的 ApiResult 对象 + /// + /// + /// + public ApiResult(int code, string msg, object data) + { + Code = code; + Msg = msg; + if (data != null) + { + Data = data; + } + } + + /// + /// 返回成功消息 + /// + /// + public ApiResult Success() + { + Code = (int)ResultCode.SUCCESS; + Msg = "success"; + return this; + } + + /// + /// 返回成功消息 + /// + /// 数据对象 + /// 成功消息 + public static ApiResult Success(object data) { return new ApiResult(HttpStatus.SUCCESS, "success", data); } + + /// + /// 返回成功消息 + /// + /// 返回内容 + /// 成功消息 + public static ApiResult Success(string msg) { return new ApiResult(HttpStatus.SUCCESS, msg, null); } + + /// + /// 返回成功消息 + /// + /// 返回内容 + /// 数据对象 + /// 成功消息 + public static ApiResult Success(string msg, object data) { return new ApiResult(HttpStatus.SUCCESS, msg, data); } + + /// + /// 访问被拒 + /// + /// + /// + public ApiResult On401() + { + Code = (int)ResultCode.DENY; + Msg = "access denyed"; + return this; + } + public ApiResult Error(ResultCode resultCode, string msg = "") + { + Code = (int)resultCode; + Msg = msg; + return this; + } + + /// + /// 返回失败消息 + /// + /// + /// + /// + public static ApiResult Error(int code, string msg) { return new ApiResult(code, msg); } + + /// + /// 返回失败消息 + /// + /// + /// + public static ApiResult Error(string msg) { return new ApiResult((int)ResultCode.CUSTOM_ERROR, msg); } + + public override string ToString() + { + return $"msg={Msg},data={Data}"; + } + } + + public class ApiResult : ApiResult + { + public T Result { get; set; } + } +} diff --git a/ARW-net/Infrastructure/Model/SendEmailDto.cs b/ARW-net/Infrastructure/Model/SendEmailDto.cs new file mode 100644 index 0000000..7408dcf --- /dev/null +++ b/ARW-net/Infrastructure/Model/SendEmailDto.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Infrastructure.Model +{ + public class SendEmailDto + { + public string FileUrl { get; set; } = ""; + public string Subject { get; set; } + public string ToUser { get; set; } + public string Content { get; set; } = ""; + public string HtmlContent { get; set; } + /// + /// 是否发送给自己 + /// + public bool SendMe { get; set; } + public DateTime AddTime { get; set; } + } +} diff --git a/ARW-net/Infrastructure/OptionsSetting.cs b/ARW-net/Infrastructure/OptionsSetting.cs new file mode 100644 index 0000000..c6cf6f0 --- /dev/null +++ b/ARW-net/Infrastructure/OptionsSetting.cs @@ -0,0 +1,69 @@ + +namespace Infrastructure +{ + /// + /// 获取配置文件POCO实体类 + /// + public class OptionsSetting + { + /// + /// 是否演示模式 + /// + public bool DemoMode { get; set; } + public MailOptions MailOptions { get; set; } + public Upload Upload { get; set; } + public ALYUN_OCS ALYUN_OCS { get; set; } + public JwtSettings JwtSettings { get; set; } + } + /// + /// 发送邮件数据配置 + /// + public class MailOptions + { + public string From { get; set; } + public string Password { get; set; } + public string Smtp { get; set; } + public int Port { get; set; } + public string Signature { get; set; } + } + /// + /// 上传 + /// + public class Upload + { + public string UploadUrl { get; set; } + public string LocalSavePath { get; set; } + } + /// + /// 阿里云存储 + /// + public class ALYUN_OCS + { + public string REGIONID { get; set; } + public string KEY { get; set; } + public string SECRET { get; set; } + } + + /// + /// Jwt + /// + public class JwtSettings + { + /// + /// token是谁颁发的 + /// + public string Issuer { get; set; } + /// + /// token可以给那些客户端使用 + /// + public string Audience { get; set; } + /// + /// 加密的key(SecretKey必须大于16个,是大于,不是大于等于) + /// + public string SecretKey { get; set; } + /// + /// token时间(分) + /// + public int Expire { get; set; } = 1440; + } +} diff --git a/ARW-net/LICENSE b/ARW-net/LICENSE new file mode 100644 index 0000000..365fbfe --- /dev/null +++ b/ARW-net/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 zrry + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ARW-net/README.md b/ARW-net/README.md new file mode 100644 index 0000000..63d7c69 --- /dev/null +++ b/ARW-net/README.md @@ -0,0 +1,404 @@ +# .NET后端开发流程 + + + +基于.NET6 + vue3 前后端分离的.net快速开发框架 + + + +## 🍟 概述 + +- 本项目适合有一定**NetCore**和 **vue基础**的开发人员 +- 基于**.NET6**实现的通用权限管理平台(RBAC模式)。整合最新技术高效快速开发,前后端分离模式,开箱即用。 + + + +## 🍀 后端技术 + +- 核心框架:.Net6.0 + **Web API** + **sqlsugar** + **swagger** + signalR + IpRateARWmit + Quartz.net + Redis +- 定时计划任务:Quartz.Net组件,支持执行程序集或者http网络请求,**备份数据库** +- 安全支持:过滤器(数据权限过滤)、Sql注入、请求伪造 +- 日志管理:NLog、登录日志、操作日志、定时任务日志 +- 工具类:验证码、丰富公共功能 +- 接口限流:支持接口限流,避免恶意请求导致服务层压力过大 +- 代码生成:高效率开发,代码生成器可以一键生成所有前后端代码 +- 数据字典:支持数据字典,可以方便对一些状态进行管理 +- 分库分表:使用orm sqlsugar可以很轻松的实现分库分库性能优越 +- 多 租 户:支持多租户功能 +- 缓存数据:内置内存缓存和Redis + + + +## 🔧 配置 + +1. 用 Vs 打开项目解决方案文件 `ARWAdmin.sln` + + 下载地址:https://visualstudio.microsoft.com/zh-hans/ + +2. 连接服务器数据库 (navicat) + +3. 修改数据库连接配置 `ARW.WebApi` 目录下的 `appsettings.json` 配置 + +```json +{ + "ConnectionStrings": { + "conn_db": "Data Source=localhost;Initial Catalog=ARWAdmin;User ID=sa;Password=ARWadmin123;Trusted_Connection=SSPI", //当前项目连接数据库, + "conn_db_type": 1, //选择对应的数据库类型MySql = 0, SqlServer = 1。其他数据库自行添加基础数据 + } +``` + +​ 现在尝试启动项目吧 ~ + + + +## 🍻项目结构 + +``` +├─Infrastructure ->[基础设施]:提供基础系统工具类。 +├─ARW.WebApi ->[webapi接口]:为Vue版或其他三方系统提供接口服务。 +├─ARW.Model ->[实体层类库]:提供项目中的数据库表、数据传输对象; +├─ARW.Common ->[常用工具]:提供项目中常用方法; +├─ARW.Repository ->[仓库层类库]:方便提供有执行存储过程的操作; +├─ARW.Service ->[服务层类库]:提供WebApi接口调用; +├─ARW.Tasks ->[定时任务类库]:提供项目定时任务实现功能; +├─ARW.CodeGenerator ->[代码生成功能]:包含代码生成的模板、方法、代码生成的下载。 +``` + + + +## 🔍 开发规范 + +>开发时 不管是 哪一个层 +> +>都要 **按模块** **分好文件夹** +> +>都要 **写好注释!!!!** +> +>/// 使用这个注释 + + + +## 🧬 开发流程 + +![1](https://drive.kongwu.top/image/image/c3ffb787475b88c557b271414ef67c12.png) + + + +------ + + + +### 1、创建模型 (Model层) + +#### 1.1 Model (数据交互) + +数据交互:与**数据库**打交道的类,最后接收数据返回到这个类, + +​ 然后映射到数据库 ,数据库再把结果返回 (详细去了解ORM) + + + +这里我们使用的是 **SqlSugar** 作为 ORM + +官方文档:https://www.donet5.com/Home/Doc?typeId=1182 + +[实体常用属性](https://blog.csdn.net/weixin_60435181/article/details/125729548?spm=1001.2014.3001.5502) + +> 具体如何写实体类,可以参考实例实体 +> +> ARW.Model -> Models -> Business -> Student 或者 Class + +* 需要注意的是: + * 业务表的前缀是 : tb_ + * 系统表的前缀是 : sys_ + * 记得继承 :BusinessBase + * Id 使用的是 **雪花ID** + * **时间(DateTime)**的需要进行转换 + * excel导出 表头特要标记 EpplusTableColumn[ ] + +​ + + + +#### 1.2 Dto (数据传输) + +只接收指定参数,更加**清晰**知道传入什么参数 + +```c# +// 接受的参数 是 Dto类型的 +// [FromBody] 是 json请求体 +public IActionResult AddStudent([FromBody] StudentDto parm) +``` + +**传统Model层:** + +![](https://drive.kongwu.top/image/image/bacbca5d023bccae0233070ce7aaa297.jpg) + +**Dto层:更加清晰 知道传入什么值,方便前端对接~** + +![](https://drive.kongwu.top/image/image/14fe22617c61d6fc7dca9cd8b22763e4.jpg) + + + + + +#### 1.3 Vo (数据展示) + +![](https://drive.kongwu.top/image/image/04228d577e85b9906a8ce1f90c1f6676.png) + +**展现需要的字段:** + +![](https://drive.kongwu.top/image/image/4f04bcaf9ce79eee0b52ba5af51be3b0.jpg) + + + +定义一个新的类,**只展示我们需要的字段** + +使用 **Select()** 把实体值 赋值给 新的类就可以了。 + +```c# +var query = _studentRepository + .Queryable() + .LeftJoin((s, c) => s.ClassId == c.ClassId) + .Where(predicate.ToExpression()) + .Select((s, c) => new StudentVo + { + StudentId = s.StudentId, + ClassId = c.ClassId, + ClassName = c.ClassName, + StudentName = s.StudentName, + Sex = s.Sex, + Age = s.Age, + StudentImg = s.StudentImg, + StudentTag = s.StudentTag, + StudentService= s.StudentService.ToString(), + StudentDescribe = s.StudentDescribe + }); + +``` + + + +------ + + + +### 2、创建接口和实现类 (Service层) + +作用: + +1、代码整洁 + +2、分层,好维护 + +3、可以注册服务,不需要实例化 + + + +#### 2.1 创建接口 + +在 `ARW.Service` -> `Business` -> `IBusinessService` 中 创建**接口** (interface) + +注意:记得 继承 **IBaseService<对应的数据实体类>** + +* 命名规范:**IxxxService** + * 前缀 I + * 后缀 Service + + + +**Interface(接口):** + +```c# + public interface IStudentService : IBaseService + { + /// + /// 获取学生分页列表 + /// + /// + /// + PagedInfo GetStudentList(StudentQueryDto parm); + + } +``` + + + +#### 2.2 创建实现类 + +在 `ARW.Service` -> `Business` -> `BusinessService` 中 创建**实现类** (Impl) + +注意:记得 继承 **BaseService<对应的数据实体类>,相对应的接口** + +​ **添加服务到容器**( 特性 ): [AppService(ServiceType = typeof( `相对应的接口` ), ServiceLifetime = LifeTime.Transient)] + +```c# +[AppService(ServiceType = typeof(IStudentService), ServiceLifetime = LifeTime.Transient)] +public class StudentServiceImpl : BaseService, IStudentService +``` + + + +`实现类要实现 接口所定义的方法` + +```c# + // 写业务方法 + + public PagedInfo GetStudentList(StudentQueryDto parm) + { + //开始拼装查询条件d + var predicate = Expressionable.Create(); + + //搜索条件查询语法参考Sqlsugar + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.StudentName), s => s.StudentName.Contains(parm.StudentName)); + predicate = predicate.AndIF(parm.ClassId != null, s => s.ClassId == parm.ClassId); + + var query = _studentRepository + .Queryable() + .LeftJoin((s, c) => s.ClassId == c.ClassId) + .Where(predicate.ToExpression()) + .Select((s, c) => new StudentVo + { + StudentId = s.StudentId, + ClassId = c.ClassId, + ClassName = c.ClassName, + StudentName = s.StudentName, + Sex = s.Sex, + Age = s.Age, + StudentImg = s.StudentImg, + StudentTag = s.StudentTag, + StudentService= s.StudentService.ToString(), + StudentDescribe = s.StudentDescribe + }); + + + return query.ToPage(parm); + } +``` + + + +### 3、创建仓储层(Repository层) + +在 `ARW.Repository` -> `Business` 中 创建**仓储类** (Repository)、 + +作用:用于超级复杂的业务逻辑,当 `接口实现类 ` 都写的很乱时,可以使用这个层 + +一般走流程需要创建一个,所以参考以下模板创建: + +```c# +[AppService(ServiceLifetime = LifeTime.Transient)] +public class StudentRepository : BaseRepository +{ + /* + * 复杂的业务逻辑代码 + */ +} +``` + + + +------ + + + +### 4、创建控制层 (Controller层) + +**-- 这里细节比较多,请注意看 --** + + + +**控制器头部:** + +```c# + [Verify] // 身份认证 + [Route("business/[controller]")] // 路由 + public class StudentController : BaseController // 继承 BaseController +``` + + + +**依赖注入(构造函数注入):** + +```c# + /// + /// 依赖注入 + /// + /// 学生服务 + /// 班级服务 + public StudentController(IStudentService studentService, IClassService classService) + { + _studentService = studentService; + _classService = classService; + } +``` + + + +**方法:** + +* 请求参数格式: + +​ **[FromBody]:**json请求体 + +​ **[FromQuery]:** url 获取参数 + +​ **[FromForm(Name = "xxx")] :**获取From表单中的参数 + +* 抛出异常: + + ​ **throw new CustomException(" ")** + +* 返回结果: + +​ **SUCCESS("消息")** + +​ **ToResponse(数据,"消息")** + + + +```c# +// 头部规范: +[HttpPost("addStudent")] // [请求方法("请求路由")] +[ActionPermissionFilter(Permission = "business:student:add")] // 权限标识符 +[Log(Title = "学生添加", BusinessType = BusinessType.INSERT)] // 日志 +public IActionResult AddStudent([FromBody] StudentDto parm) +{ + // 抛出异常 + if (parm == null) + { + throw new CustomException("请求参数错误"); + } + + // 模型映射:Dto层需要把接受的数据 给到 Model层,才能和数据库交互 + var modal = parm.Adapt().ToCreate(HttpContext); + + var response = _studentService.Insertable(modal).ExecuteReturnSnowflakeId(); + return SUCCESS("添加成功!"); +} +``` + + + +>查询分页(联表) +> +>查询树形 +> +>查询单条 +> +>添加 +> +>修改 +> +>删除 +> +>导入Excel +> +>导出Excel +> +>下载模板Excel + +具体操作方法可参考: + +`ARW.WebApi` -> `Business` -> `StudentController(基础方法)` / `ProductTypeController(树形)` + diff --git a/ARW-net/document/chat_init.sql b/ARW-net/document/chat_init.sql new file mode 100644 index 0000000..87fd410 --- /dev/null +++ b/ARW-net/document/chat_init.sql @@ -0,0 +1,1900 @@ +/* + Navicat Premium Data Transfer + + Source Server : mysql本地 + Source Server Type : MySQL + Source Server Version : 50726 + Source Host : localhost:3306 + Source Schema : chat + + Target Server Type : MySQL + Target Server Version : 50726 + File Encoding : 65001 + + Date: 08/10/2022 22:00:27 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for gen_table +-- ---------------------------- +DROP TABLE IF EXISTS `gen_table`; +CREATE TABLE `gen_table` ( + `tableId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', + `tableName` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '表名称', + `tableComment` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '表描述', + `subTableName` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '关联子表的表名', + `subTableFkName` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '子表关联的外键名', + `className` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '实体类名称', + `tplCategory` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'crud' COMMENT '使用的模板(crud单表操作 tree树表操作)', + `baseNameSpace` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生成命名空间前缀', + `moduleName` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生成模块名', + `businessName` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生成业务名', + `functionName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生成功能名', + `functionAuthor` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生成功能作者', + `genType` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '生成代码方式(0zip压缩包 1自定义路径)', + `genPath` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '/' COMMENT '生成路径(不填默认项目路径)', + `options` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '其它生成选项', + `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注', + `dbName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据库名', + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`tableId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of gen_table +-- ---------------------------- + +-- ---------------------------- +-- Table structure for gen_table_column +-- ---------------------------- +DROP TABLE IF EXISTS `gen_table_column`; +CREATE TABLE `gen_table_column` ( + `columnId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', + `tableName` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表名', + `tableId` bigint(20) NULL DEFAULT NULL COMMENT '归属表编号', + `columnName` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列名称', + `columnComment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列描述', + `columnType` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列类型', + `csharpType` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'C#类型', + `csharpField` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'C#字段名', + `isPk` tinyint(1) NULL DEFAULT NULL COMMENT '是否主键(1是)', + `isIncrement` tinyint(1) NULL DEFAULT NULL COMMENT '是否自增(1是)', + `isRequired` tinyint(1) NULL DEFAULT NULL COMMENT '是否必填(1是)', + `isInsert` tinyint(1) NULL DEFAULT NULL COMMENT '是否为插入字段(1是)', + `isEdit` tinyint(1) NULL DEFAULT NULL COMMENT '是否编辑字段(1是)', + `isList` tinyint(1) NULL DEFAULT NULL COMMENT '是否列表字段(1是)', + `isQuery` tinyint(4) NULL DEFAULT NULL COMMENT '是否查询字段(1是)', + `isSort` tinyint(4) NULL DEFAULT NULL COMMENT '是否排序字段(1是)', + `queryType` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'EQ' COMMENT '查询方式(等于、不等于、大于、小于、范围)', + `htmlType` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)', + `dictType` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `sort` int(11) NULL DEFAULT NULL COMMENT '排序', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`columnId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of gen_table_column +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_common_lang +-- ---------------------------- +DROP TABLE IF EXISTS `sys_common_lang`; +CREATE TABLE `sys_common_lang` ( + `id` bigint(20) NOT NULL COMMENT 'id', + `lang_code` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `lang_key` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `lang_name` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `addtime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_common_lang +-- ---------------------------- +INSERT INTO `sys_common_lang` VALUES (1575384859323535360, 'zh-cn', 'menu.chatUser', '聊天室用户管理', '2022-09-29 15:19:54'); +INSERT INTO `sys_common_lang` VALUES (1575384859327729664, 'zh-tw', 'menu.chatUser', '聊天室用戶管理', '2022-09-29 15:19:54'); +INSERT INTO `sys_common_lang` VALUES (1575384859327729665, 'en', 'menu.chatUser', 'chatUser', '2022-09-29 15:19:54'); + +-- ---------------------------- +-- Table structure for sys_config +-- ---------------------------- +DROP TABLE IF EXISTS `sys_config`; +CREATE TABLE `sys_config` ( + `configId` int(11) NOT NULL AUTO_INCREMENT COMMENT '参数主键', + `configName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数名称', + `configKey` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数键名', + `configValue` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数键值', + `configType` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)', + `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注', + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`configId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_config +-- ---------------------------- +INSERT INTO `sys_config` VALUES (1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2021-12-26 13:14:57', '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow', NULL); +INSERT INTO `sys_config` VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2021-12-26 13:14:57', '', NULL, '初始化密码 123456', NULL); +INSERT INTO `sys_config` VALUES (3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2021-12-26 13:14:57', '', NULL, '深色主题theme-dark,浅色主题theme-light', NULL); +INSERT INTO `sys_config` VALUES (4, '账号自助-验证码开关', 'sys.account.captchaOnOff', '4', 'Y', 'admin', '2021-12-26 13:14:57', 'admin', '2022-10-05 15:51:34', '是否开启验证码功能(off、关闭,1、动态验证码 2、动态gif泡泡 3、泡泡 4、静态验证码)', NULL); +INSERT INTO `sys_config` VALUES (5, '本地文件上传访问域名', 'sys.file.uploadurl', 'http://chatvue.aerwen.net/prod-api/', 'Y', '', '2022-07-26 10:02:23', 'admin', '2022-10-05 15:52:27', NULL, NULL); +INSERT INTO `sys_config` VALUES (6, '开启注册功能', 'sys.account.register', 'true', 'Y', 'admin', '2022-07-26 10:02:23', 'admin', NULL, NULL, NULL); +INSERT INTO `sys_config` VALUES (7, '文章预览地址', 'sys.article.preview.url', 'http://www.izhaorui.cn/article/details/', 'Y', 'admin', '2022-07-26 10:02:23', '', NULL, '格式:http://www.izhaorui.cn/article/details/{aid},其中{aid}为文章的id', NULL); + +-- ---------------------------- +-- Table structure for sys_dept +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dept`; +CREATE TABLE `sys_dept` ( + `deptId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id', + `parentId` bigint(20) NULL DEFAULT 0 COMMENT '父部门id', + `ancestors` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '祖级列表', + `deptName` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '部门名称', + `orderNum` int(11) NULL DEFAULT 0 COMMENT '显示顺序', + `leader` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '负责人', + `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话', + `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '部门状态(0正常 1停用)', + `delFlag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`deptId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 201 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dept +-- ---------------------------- +INSERT INTO `sys_dept` VALUES (100, 0, '0', 'A公司', 0, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL, NULL); +INSERT INTO `sys_dept` VALUES (101, 100, '0,100', '研发部门', 1, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL, NULL); +INSERT INTO `sys_dept` VALUES (102, 100, '0,100', '市场部门', 2, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL, NULL); +INSERT INTO `sys_dept` VALUES (103, 100, '0,100', '测试部门', 3, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL, NULL); +INSERT INTO `sys_dept` VALUES (104, 100, '0,100', '财务部门', 4, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL, NULL); +INSERT INTO `sys_dept` VALUES (200, 0, '0', 'B公司', 0, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_dict_data +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_data`; +CREATE TABLE `sys_dict_data` ( + `dictCode` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典编码', + `dictSort` int(11) NULL DEFAULT 0 COMMENT '字典排序', + `dictLabel` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典标签', + `dictValue` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典键值', + `dictType` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `cssClass` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)', + `listClass` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表格回显样式', + `isDefault` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '是否默认(Y是 N否)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`dictCode`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 37 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict_data +-- ---------------------------- +INSERT INTO `sys_dict_data` VALUES (1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别男', NULL); +INSERT INTO `sys_dict_data` VALUES (2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别女', NULL); +INSERT INTO `sys_dict_data` VALUES (3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别未知', NULL); +INSERT INTO `sys_dict_data` VALUES (4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '显示菜单', NULL); +INSERT INTO `sys_dict_data` VALUES (5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '隐藏菜单', NULL); +INSERT INTO `sys_dict_data` VALUES (6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '正常状态', NULL); +INSERT INTO `sys_dict_data` VALUES (7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '停用状态', NULL); +INSERT INTO `sys_dict_data` VALUES (8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '正常状态', NULL); +INSERT INTO `sys_dict_data` VALUES (9, 2, '异常', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', '2021-07-02 14:09:09', '停用状态', NULL); +INSERT INTO `sys_dict_data` VALUES (10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '默认分组', NULL); +INSERT INTO `sys_dict_data` VALUES (11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统分组', NULL); +INSERT INTO `sys_dict_data` VALUES (12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统默认是', NULL); +INSERT INTO `sys_dict_data` VALUES (13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统默认否', NULL); +INSERT INTO `sys_dict_data` VALUES (14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '通知', NULL); +INSERT INTO `sys_dict_data` VALUES (15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '公告', NULL); +INSERT INTO `sys_dict_data` VALUES (16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '正常状态', NULL); +INSERT INTO `sys_dict_data` VALUES (17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '关闭状态', NULL); +INSERT INTO `sys_dict_data` VALUES (18, 0, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '其他操作', NULL); +INSERT INTO `sys_dict_data` VALUES (19, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '新增操作', NULL); +INSERT INTO `sys_dict_data` VALUES (20, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '修改操作', NULL); +INSERT INTO `sys_dict_data` VALUES (21, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '删除操作', NULL); +INSERT INTO `sys_dict_data` VALUES (22, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '授权操作', NULL); +INSERT INTO `sys_dict_data` VALUES (23, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '导出操作', NULL); +INSERT INTO `sys_dict_data` VALUES (24, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '导入操作', NULL); +INSERT INTO `sys_dict_data` VALUES (25, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '强退操作', NULL); +INSERT INTO `sys_dict_data` VALUES (26, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '生成操作', NULL); +INSERT INTO `sys_dict_data` VALUES (27, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '清空操作', NULL); +INSERT INTO `sys_dict_data` VALUES (28, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2021-02-24 10:56:23', '', NULL, '正常状态', NULL); +INSERT INTO `sys_dict_data` VALUES (29, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:23', '', NULL, '停用状态', NULL); +INSERT INTO `sys_dict_data` VALUES (30, 1, '发布', '1', 'sys_article_status', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:34:56', '', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (31, 2, '草稿', '2', 'sys_article_status', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (32, 1, '中文', 'zh-cn', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (33, 2, '英文', 'en', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (34, 3, '繁体', 'zh-tw', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (35, 0, '公司新闻', '1', 'tb_news_type', '', '', NULL, '0', 'admin', '2022-08-01 09:07:46', '', NULL, NULL, b'0'); +INSERT INTO `sys_dict_data` VALUES (36, 0, '行业新闻', '2', 'tb_news_type', '', '', NULL, '0', 'admin', '2022-08-01 09:07:57', '', NULL, NULL, b'0'); + +-- ---------------------------- +-- Table structure for sys_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_type`; +CREATE TABLE `sys_dict_type` ( + `dictId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典主键', + `dictName` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典名称', + `dictType` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', + `type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`dictId`) USING BTREE, + UNIQUE INDEX `dictType`(`dictType`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict_type +-- ---------------------------- +INSERT INTO `sys_dict_type` VALUES (1, '用户性别', 'sys_user_sex', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, '用户性别列表', NULL); +INSERT INTO `sys_dict_type` VALUES (2, '菜单状态', 'sys_show_hide', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, '菜单状态列表', NULL); +INSERT INTO `sys_dict_type` VALUES (3, '系统开关', 'sys_normal_disable', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, '系统开关列表', NULL); +INSERT INTO `sys_dict_type` VALUES (4, '任务状态', 'sys_job_status', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, '任务状态列表', NULL); +INSERT INTO `sys_dict_type` VALUES (5, '任务分组', 'sys_job_group', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, '任务分组列表', NULL); +INSERT INTO `sys_dict_type` VALUES (6, '系统是否', 'sys_yes_no', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, '系统是否列表', NULL); +INSERT INTO `sys_dict_type` VALUES (7, '通知类型', 'sys_notice_type', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, '通知类型列表', NULL); +INSERT INTO `sys_dict_type` VALUES (8, '通知状态', 'sys_notice_status', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, '通知状态列表', NULL); +INSERT INTO `sys_dict_type` VALUES (9, '操作类型', 'sys_oper_type', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, '操作类型列表', NULL); +INSERT INTO `sys_dict_type` VALUES (10, '系统状态', 'sys_common_status', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, '登录状态列表', NULL); +INSERT INTO `sys_dict_type` VALUES (11, '文章状态', 'sys_article_status', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (12, '多语言类型', 'sys_lang_type', '0', 'Y', 'admin', '2022-07-26 10:02:15', '', NULL, '多语言字典类型', NULL); +INSERT INTO `sys_dict_type` VALUES (13, '新闻类型', 'tb_news_type', '0', 'N', 'admin', '2022-08-01 09:06:34', '', NULL, '新闻字典类型', b'0'); + +-- ---------------------------- +-- Table structure for sys_file +-- ---------------------------- +DROP TABLE IF EXISTS `sys_file`; +CREATE TABLE `sys_file` ( + `id` bigint(20) NOT NULL, + `realName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件真实名', + `fileName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件名', + `fileUrl` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件存储地址', + `storePath` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '仓库位置', + `accessUrl` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '访问路径', + `fileSize` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件大小', + `fileType` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件类型', + `fileExt` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件扩展名', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '上传时间', + `storeType` int(11) NULL DEFAULT NULL COMMENT '存储类型', + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_file +-- ---------------------------- +INSERT INTO `sys_file` VALUES (1560535882900049920, '58543523_p0_master1200.jpg', '93FD61DA1B978915.jpg', '/home/www/ARW/api/wwwroot/uploads/20220819/93FD61DA1B978915.jpg', 'uploads/20220819', 'http://localhost:8888/uploads/20220819/93FD61DA1B978915.jpg', '406.75kb', 'image/jpeg', '.jpg', 'admin', '2022-08-19 15:55:22', 1, b'0'); +INSERT INTO `sys_file` VALUES (1562728907625598976, '82704116_p0_custom1200.jpg', '017814321664F035.jpg', 'C:/Users/PC/Desktop/.Net项目/chat/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/017814321664F035.jpg', 'uploads\\20220825', 'http://localhost:8888/uploads/20220825/017814321664F035.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-08-25 17:09:35', 1, b'0'); +INSERT INTO `sys_file` VALUES (1562729859707441152, '82704116_p0_custom1200.jpg', '56AB22F790F51C2C.jpg', 'C:/Users/PC/Desktop/.Net项目/chat/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/56AB22F790F51C2C.jpg', 'uploads\\20220825', 'http://localhost:8888/uploads/20220825/56AB22F790F51C2C.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-08-25 17:13:27', 1, b'0'); +INSERT INTO `sys_file` VALUES (1562780159722000384, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', 'F2970B7B2806B62B.jpg', 'C:/Users/PC/Desktop/.Net项目/chat/ARW-net/ARW.WebApi/wwwroot/uploads/20220825/F2970B7B2806B62B.jpg', 'uploads\\20220825', 'http://localhost:8888/uploads/20220825/F2970B7B2806B62B.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-08-25 20:33:20', 1, b'0'); +INSERT INTO `sys_file` VALUES (1565234537296957440, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', 'AA06C277DD3F8380.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220901/AA06C277DD3F8380.jpg', 'uploads\\20220901', 'http://localhost:8888/uploads/20220901/AA06C277DD3F8380.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-01 15:06:09', 1, b'0'); +INSERT INTO `sys_file` VALUES (1565546693104111616, '82704116_p0_custom1200.jpg', '769047AC858DACD4.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220902/769047AC858DACD4.jpg', 'uploads\\20220902', 'http://localhost:8888/uploads/20220902/769047AC858DACD4.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-09-02 11:46:33', 1, b'0'); +INSERT INTO `sys_file` VALUES (1565547326389489664, 'gaomu.png', '04808B0D88D54E04.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220902/04808B0D88D54E04.png', 'uploads\\20220902', 'http://localhost:8888/uploads/20220902/04808B0D88D54E04.png', '191.59kb', 'image/png', '.png', NULL, '2022-09-02 11:49:04', 1, b'0'); +INSERT INTO `sys_file` VALUES (1565942399681826816, '82704116_p0_custom1200.jpg', '4AEBEF89F4FBB024.jpg', 'C:/Users/26795/Desktop/.net项目/AerwenChat/ARW-net/ARW.WebApi/wwwroot/uploads/20220903/4AEBEF89F4FBB024.jpg', 'uploads\\20220903', 'http://localhost:8888/uploads/20220903/4AEBEF89F4FBB024.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-09-03 13:58:57', 1, b'0'); +INSERT INTO `sys_file` VALUES (1565945569107644416, '82704116_p0_custom1200.jpg', 'AC4CC41E0C93D74C.jpg', 'C:/Users/26795/Desktop/.net项目/AerwenChat/ARW-net/ARW.WebApi/wwwroot/uploads/20220903/AC4CC41E0C93D74C.jpg', 'uploads\\20220903', 'http://localhost:8888/uploads/20220903/AC4CC41E0C93D74C.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-09-03 14:11:32', 1, b'0'); +INSERT INTO `sys_file` VALUES (1566580402984980480, '08778594d143ad4bdc200e1dc7025aafa50f06a2.jpg', 'B1FC58DBAB7B0295.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220905/B1FC58DBAB7B0295.jpg', 'uploads\\20220905', 'http://localhost:8888/uploads/20220905/B1FC58DBAB7B0295.jpg', '37.48kb', 'image/jpeg', '.jpg', NULL, '2022-09-05 08:14:08', 1, b'0'); +INSERT INTO `sys_file` VALUES (1566781690028888064, '73042381_p0_master1200.jpg', 'F6B06CC126E60A2E.jpg', 'C:/Users/26795/Desktop/.net项目/AerwenChat/ARW-net/ARW.WebApi/wwwroot/uploads/20220905/F6B06CC126E60A2E.jpg', 'uploads\\20220905', 'http://localhost:8888/uploads/20220905/F6B06CC126E60A2E.jpg', '770.22kb', 'image/jpeg', '.jpg', NULL, '2022-09-05 21:33:59', 1, b'0'); +INSERT INTO `sys_file` VALUES (1567691339305455616, '1662596950(1).png', '1FA41C90030228A0.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220908/1FA41C90030228A0.png', 'uploads\\20220908', 'http://localhost:8888/uploads/20220908/1FA41C90030228A0.png', '8.68kb', 'image/png', '.png', NULL, '2022-09-08 09:48:36', 1, b'0'); +INSERT INTO `sys_file` VALUES (1571019625095892992, '6b675fe0-cff3-4341-9cc4-64113801f6be.jpg', '3715C6FEFDF08D82.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220917/3715C6FEFDF08D82.jpg', 'uploads\\20220917', 'http://localhost:8888/uploads/20220917/3715C6FEFDF08D82.jpg', '527.76kb', 'image/jpeg', '.jpg', NULL, '2022-09-17 14:14:01', 1, b'0'); +INSERT INTO `sys_file` VALUES (1571701743266435072, '6b675fe0-cff3-4341-9cc4-64113801f6be.jpg', '4EABEF6CF26A2A13.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/4EABEF6CF26A2A13.jpg', 'uploads\\20220919', 'http://localhost:8888/uploads/20220919/4EABEF6CF26A2A13.jpg', '527.76kb', 'image/jpeg', '.jpg', NULL, '2022-09-19 11:24:31', 1, b'0'); +INSERT INTO `sys_file` VALUES (1571763186221322240, '08778594d143ad4bdc200e1dc7025aafa50f06a2.jpg', 'F5AC92A7A5ACA4CB.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/F5AC92A7A5ACA4CB.jpg', 'uploads\\20220919', 'http://localhost:8888/uploads/20220919/F5AC92A7A5ACA4CB.jpg', '37.48kb', 'image/jpeg', '.jpg', NULL, '2022-09-19 15:28:40', 1, b'0'); +INSERT INTO `sys_file` VALUES (1571815860669124608, '82704116_p0_custom1200.jpg', '4E5F93B235FCD3F5.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/4E5F93B235FCD3F5.jpg', 'uploads\\20220919', 'http://192.168.1.102:8888/uploads/20220919/4E5F93B235FCD3F5.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-09-19 18:57:59', 1, b'0'); +INSERT INTO `sys_file` VALUES (1571815938557349888, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', '1156581EB0DE5C94.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220919/1156581EB0DE5C94.jpg', 'uploads\\20220919', 'http://192.168.1.102:8888/uploads/20220919/1156581EB0DE5C94.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-19 18:58:17', 1, b'0'); +INSERT INTO `sys_file` VALUES (1572069323068018688, '80481750_p0_master1200.jpg', '058FFAF209BF7A99.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/058FFAF209BF7A99.jpg', 'uploads\\20220920', 'http://192.168.1.102:8888/uploads/20220920/058FFAF209BF7A99.jpg', '456.53kb', 'image/jpeg', '.jpg', NULL, '2022-09-20 11:45:09', 1, b'0'); +INSERT INTO `sys_file` VALUES (1572069611380281344, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', 'DA0478A903E64076.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/DA0478A903E64076.jpg', 'uploads\\20220920', 'http://192.168.1.102:8888/uploads/20220920/DA0478A903E64076.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-20 11:46:18', 1, b'0'); +INSERT INTO `sys_file` VALUES (1572070140663697408, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', '809EA20B6E36F4E7.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/809EA20B6E36F4E7.jpg', 'uploads\\20220920', 'http://192.168.1.102:8888/uploads/20220920/809EA20B6E36F4E7.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-20 11:48:24', 1, b'0'); +INSERT INTO `sys_file` VALUES (1572070156975345664, '90137533_p0_master1200.jpg', '8C74FE97C6058FAE.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220920/8C74FE97C6058FAE.jpg', 'uploads\\20220920', 'http://192.168.1.102:8888/uploads/20220920/8C74FE97C6058FAE.jpg', '694.71kb', 'image/jpeg', '.jpg', NULL, '2022-09-20 11:48:28', 1, b'0'); +INSERT INTO `sys_file` VALUES (1572777097078902784, 'wallhaven-e7d368.jpg', '7248DECA1E64F825.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/7248DECA1E64F825.jpg', 'uploads\\20220922', 'http://192.168.1.102:8888/uploads/20220922/7248DECA1E64F825.jpg', '3312.16kb', 'image/jpeg', '.jpg', NULL, '2022-09-22 10:37:35', 1, b'0'); +INSERT INTO `sys_file` VALUES (1572777163441180672, 'qianji.png', 'A2AC114F9D393C37.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/A2AC114F9D393C37.png', 'uploads\\20220922', 'http://192.168.1.102:8888/uploads/20220922/A2AC114F9D393C37.png', '1576.83kb', 'image/png', '.png', NULL, '2022-09-22 10:37:51', 1, b'0'); +INSERT INTO `sys_file` VALUES (1572777221419044864, 'c039726c9a1b63309517817e4b00aa5.jpg', 'C6D4DC432E7823B3.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/C6D4DC432E7823B3.jpg', 'uploads\\20220922', 'http://192.168.1.102:8888/uploads/20220922/C6D4DC432E7823B3.jpg', '311.31kb', 'image/jpeg', '.jpg', NULL, '2022-09-22 10:38:05', 1, b'0'); +INSERT INTO `sys_file` VALUES (1572788451089190912, '08778594d143ad4bdc200e1dc7025aafa50f06a2.jpg', 'FFFF004678B16B0B.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220922/FFFF004678B16B0B.jpg', 'uploads\\20220922', 'http://192.168.1.102:8888/uploads/20220922/FFFF004678B16B0B.jpg', '37.48kb', 'image/jpeg', '.jpg', NULL, '2022-09-22 11:22:42', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574228686104825856, 'shop1.jpg', 'B171BAB03E7F363D.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B171BAB03E7F363D.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/B171BAB03E7F363D.jpg', '169.93kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 10:45:41', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574228792342351872, 'banner3.jpg', 'F26255D16DC930E8.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/F26255D16DC930E8.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/F26255D16DC930E8.jpg', '76.83kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 10:46:07', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574230011840434176, 'button_2.png', '0A3A3DAB2477DB6D.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/0A3A3DAB2477DB6D.png', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/0A3A3DAB2477DB6D.png', '40.79kb', 'image/png', '.png', NULL, '2022-09-26 10:50:57', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574230086490656768, 'banner3.jpg', 'D4FB903D7E961464.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/D4FB903D7E961464.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/D4FB903D7E961464.jpg', '76.83kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 10:51:15', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574230188844257280, 'banner3.jpg', 'BEFB97F6FCC3DE72.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BEFB97F6FCC3DE72.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/BEFB97F6FCC3DE72.jpg', '76.83kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 10:51:39', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574230478398033920, 'logo.jpg', '7250F4B0DDDB2E43.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/7250F4B0DDDB2E43.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/7250F4B0DDDB2E43.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 10:52:48', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574230862294290432, 'button_1(原).png', '1B37B47EBF0ACC35.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/1B37B47EBF0ACC35.png', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/1B37B47EBF0ACC35.png', '7.08kb', 'image/png', '.png', NULL, '2022-09-26 10:54:20', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574230983924912128, 'logo.jpg', '19D023DD81F497F3.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/19D023DD81F497F3.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/19D023DD81F497F3.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 10:54:49', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574231336833650688, 'shop2.jpg', 'B679D3D88DF79934.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B679D3D88DF79934.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/B679D3D88DF79934.jpg', '183.05kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 10:56:13', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574231762039607296, 'shop1.jpg', 'FD4251FABA71A7ED.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FD4251FABA71A7ED.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/FD4251FABA71A7ED.jpg', '169.93kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 10:57:55', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574232318426615808, 'shop1.jpg', 'F25CFD436A8B5103.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/F25CFD436A8B5103.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/F25CFD436A8B5103.jpg', '169.93kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:00:07', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574232395085910016, 'shop2.jpg', '5B5302AA778936E1.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5B5302AA778936E1.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/5B5302AA778936E1.jpg', '183.05kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:00:25', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574232462920388608, 'shop1.jpg', 'A78DDEF5FD5FCCA9.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A78DDEF5FD5FCCA9.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/A78DDEF5FD5FCCA9.jpg', '169.93kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:00:42', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574233430240137216, 'shop1.jpg', '8EFDA5117CBCAE60.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/8EFDA5117CBCAE60.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/8EFDA5117CBCAE60.jpg', '169.93kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:04:32', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574233897389133824, 'banner2.jpg', '70E4AF319A69AF16.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/70E4AF319A69AF16.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/70E4AF319A69AF16.jpg', '57.71kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:06:24', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574235193852694528, 'banner2.jpg', 'EE08EB7B4656A1B0.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/EE08EB7B4656A1B0.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/EE08EB7B4656A1B0.jpg', '57.71kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:11:33', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574235899519176704, 'banner1.png', '852931362E331864.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/852931362E331864.png', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/852931362E331864.png', '42.35kb', 'image/png', '.png', NULL, '2022-09-26 11:14:21', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574239455521411072, 'banner1.png', 'A5D1382662F591E3.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A5D1382662F591E3.png', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/A5D1382662F591E3.png', '42.35kb', 'image/png', '.png', NULL, '2022-09-26 11:28:29', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574239662225100800, 'button_2.png', 'B927A34354D562FC.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B927A34354D562FC.png', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/B927A34354D562FC.png', '40.79kb', 'image/png', '.png', NULL, '2022-09-26 11:29:18', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574239804084850688, 'favicon.ico', 'A78DC9A99B6FB492.ico', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A78DC9A99B6FB492.ico', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/A78DC9A99B6FB492.ico', '16.05kb', 'image/x-icon', '.ico', NULL, '2022-09-26 11:29:52', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574239898326667264, 'favicon.ico', 'BC3B41631BD42707.ico', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BC3B41631BD42707.ico', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/BC3B41631BD42707.ico', '16.05kb', 'image/x-icon', '.ico', NULL, '2022-09-26 11:30:14', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574239980396613632, 'button_2(原).png', '5826EB9B84AFDD53.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5826EB9B84AFDD53.png', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/5826EB9B84AFDD53.png', '7.06kb', 'image/png', '.png', NULL, '2022-09-26 11:30:34', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574240031172857856, 'banner3.jpg', 'ABB3E3C40492CD4C.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/ABB3E3C40492CD4C.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/ABB3E3C40492CD4C.jpg', '76.83kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:30:46', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574240145115320320, 'logo.jpg', 'A53F7C911A1FF6F6.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A53F7C911A1FF6F6.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/A53F7C911A1FF6F6.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:31:13', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574240202933800960, 'logo.jpg', 'D5207F143DBC4F50.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/D5207F143DBC4F50.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/D5207F143DBC4F50.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:31:27', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574240278150254592, 'logo.jpg', '74CEDC5CA970DD23.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/74CEDC5CA970DD23.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/74CEDC5CA970DD23.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:31:45', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574240340360171520, 'logo.jpg', '74BE1823B1B45795.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/74BE1823B1B45795.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/74BE1823B1B45795.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:32:00', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574240741939613696, 'logo.jpg', 'C0503664C6CA4BFA.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C0503664C6CA4BFA.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/C0503664C6CA4BFA.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:33:36', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574240782838272000, 'logo.jpg', '6FF9BD68A30E7913.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/6FF9BD68A30E7913.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/6FF9BD68A30E7913.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:33:45', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574241102561677312, 'logo.jpg', 'BB3F8C1A4A2C8876.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/BB3F8C1A4A2C8876.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/BB3F8C1A4A2C8876.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:35:01', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574241353490108416, 'logo.jpg', '42B0B8B291EC7766.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/42B0B8B291EC7766.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/42B0B8B291EC7766.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:36:01', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574246860980359168, 'logo.jpg', '35CD628B14AF00C0.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/35CD628B14AF00C0.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/35CD628B14AF00C0.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 11:57:54', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574281846290780160, 'logo.jpg', '5602BB65124E86B8.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/5602BB65124E86B8.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/5602BB65124E86B8.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 14:16:56', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574282180782329856, 'logo.jpg', 'FC2E0B574656215E.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FC2E0B574656215E.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/FC2E0B574656215E.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 14:18:15', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574284770182041600, 'banner2.png', 'CB3039C62C218FFC.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/CB3039C62C218FFC.png', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/CB3039C62C218FFC.png', '120.88kb', 'image/png', '.png', NULL, '2022-09-26 14:28:33', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574284839568412672, 'banner3(原3).jpg', 'A3A75B81DBCD7EC6.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A3A75B81DBCD7EC6.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/A3A75B81DBCD7EC6.jpg', '47.79kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 14:28:49', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574284917074956288, 'banner2.jpg', '05CFA4D67F7A3D7C.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/05CFA4D67F7A3D7C.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/05CFA4D67F7A3D7C.jpg', '57.71kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 14:29:08', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574285197099274240, 'logo.jpg', 'B2099BF2D7B7F046.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B2099BF2D7B7F046.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/B2099BF2D7B7F046.jpg', '53.08kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 14:30:14', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574288848760999936, 'banner1.png', 'B72EB70E73BCBBE4.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B72EB70E73BCBBE4.png', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/B72EB70E73BCBBE4.png', '42.35kb', 'image/png', '.png', NULL, '2022-09-26 14:44:45', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574301429311606784, '83492653_p0_master1200.jpg', 'AD22FB25F9A93D6B.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/AD22FB25F9A93D6B.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/AD22FB25F9A93D6B.jpg', '847.68kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 15:34:45', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574301499482312704, '90137533_p0_master1200.jpg', '972869B74439FDC0.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/972869B74439FDC0.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/972869B74439FDC0.jpg', '694.71kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 15:35:01', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574301830245126144, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', '36CC1BA9989F41D0.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/36CC1BA9989F41D0.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/36CC1BA9989F41D0.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 15:36:20', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574302458002411520, '83492653_p0_master1200.jpg', '73699EF18DD670F2.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/73699EF18DD670F2.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/73699EF18DD670F2.jpg', '847.68kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 15:38:50', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574331161038163968, '82704116_p0_custom1200.jpg', '3C5C6630E1366EEF.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/3C5C6630E1366EEF.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/3C5C6630E1366EEF.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 17:32:53', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574331229082357760, '98554607_p0_master1200.jpg', 'AEFC5CCC12662C34.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/AEFC5CCC12662C34.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/AEFC5CCC12662C34.jpg', '538.67kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 17:33:09', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574331229082357761, '99680641_p0_master1200.jpg', 'A5FE206E59BFA409.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/A5FE206E59BFA409.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/A5FE206E59BFA409.jpg', '296.69kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 17:33:09', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574331229132689408, '99350268_p0.png', '0E4C67755CC83E8E.png', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/0E4C67755CC83E8E.png', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/0E4C67755CC83E8E.png', '3677.04kb', 'image/png', '.png', NULL, '2022-09-26 17:33:09', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574331348406112256, '83492653_p0_master1200.jpg', '357FB9FFF6680E43.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/357FB9FFF6680E43.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/357FB9FFF6680E43.jpg', '847.68kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 17:33:38', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574331399165579264, '82704116_p0_custom1200.jpg', 'C19D91C24C308DB7.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C19D91C24C308DB7.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/C19D91C24C308DB7.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 17:33:50', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574331622122196992, '82704116_p0_custom1200.jpg', '19CB593AD2D7B217.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/19CB593AD2D7B217.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/19CB593AD2D7B217.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 17:34:43', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574331622138974208, '83492653_p0_master1200.jpg', 'ABED21F2782D787F.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/ABED21F2782D787F.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/ABED21F2782D787F.jpg', '847.68kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 17:34:43', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574333193522384896, '83492653_p0_master1200.jpg', 'FB9A0E2797F58555.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/FB9A0E2797F58555.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/FB9A0E2797F58555.jpg', '847.68kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 17:40:58', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574333202615635968, '80481750_p0_master1200.jpg', '9DE549DD2BBF1CE7.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/9DE549DD2BBF1CE7.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/9DE549DD2BBF1CE7.jpg', '456.53kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 17:41:00', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574333262766149632, '87833631_p0_master1200.jpg', 'C383A12E5A8CE3C6.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/C383A12E5A8CE3C6.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/C383A12E5A8CE3C6.jpg', '695.8kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 17:41:14', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574333283611840512, '92599590_p0_master1200.jpg', 'B1FE39C84C462B02.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/B1FE39C84C462B02.jpg', 'uploads\\20220926', 'http://192.168.1.102:8888/uploads/20220926/B1FE39C84C462B02.jpg', '712.78kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 17:41:19', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574382958259867648, '微信图片_20220829163217.jpg', 'CAF770A26648B104.jpg', 'C:/Users/26795/Desktop/.net项目/AerwenChat/ARW-net/ARW.WebApi/wwwroot/uploads/20220926/CAF770A26648B104.jpg', 'uploads\\20220926', 'http://localhost:8888/uploads/20220926/CAF770A26648B104.jpg', '133.41kb', 'image/jpeg', '.jpg', NULL, '2022-09-26 20:58:43', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574647789969870848, '80481750_p0_master1200.jpg', 'A440804796E559BB.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/A440804796E559BB.jpg', 'uploads\\20220927', 'http://192.168.1.102:8888/uploads/20220927/A440804796E559BB.jpg', '456.53kb', 'image/jpeg', '.jpg', NULL, '2022-09-27 14:31:03', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574684735299522560, '83492653_p0_master1200.jpg', 'B0B542D8AFA57F26.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/B0B542D8AFA57F26.jpg', 'uploads\\20220927', 'http://192.168.1.102:8888/uploads/20220927/B0B542D8AFA57F26.jpg', '847.68kb', 'image/jpeg', '.jpg', NULL, '2022-09-27 16:57:52', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574685503494688768, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', '7ADFB3BF8153EE40.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/7ADFB3BF8153EE40.jpg', 'uploads\\20220927', 'http://192.168.1.102:8888/uploads/20220927/7ADFB3BF8153EE40.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-27 17:00:55', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574686569401552896, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', '371BB4D55B838750.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/371BB4D55B838750.jpg', 'uploads\\20220927', 'http://192.168.1.102:8888/uploads/20220927/371BB4D55B838750.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-27 17:05:09', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574687658939125760, '65707174_p0_master1200.jpg', '5433A7D9389E238B.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/5433A7D9389E238B.jpg', 'uploads\\20220927', 'http://192.168.1.102:8888/uploads/20220927/5433A7D9389E238B.jpg', '686.26kb', 'image/jpeg', '.jpg', NULL, '2022-09-27 17:09:29', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574689281807618048, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', '3ADE54BAE7E41262.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/3ADE54BAE7E41262.jpg', 'uploads\\20220927', 'http://192.168.1.102:8888/uploads/20220927/3ADE54BAE7E41262.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-27 17:15:56', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574689291358048256, '65707174_p0_master1200.jpg', '09F35E154C7A8CFA.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/09F35E154C7A8CFA.jpg', 'uploads\\20220927', 'http://192.168.1.102:8888/uploads/20220927/09F35E154C7A8CFA.jpg', '686.26kb', 'image/jpeg', '.jpg', NULL, '2022-09-27 17:15:58', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574689450598993920, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', 'CE6845D4D76F25A9.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/CE6845D4D76F25A9.jpg', 'uploads\\20220927', 'http://192.168.1.102:8888/uploads/20220927/CE6845D4D76F25A9.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-27 17:16:36', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574695176289521664, '96755248_p0_master1200.jpg', '91361841E4440055.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/91361841E4440055.jpg', 'uploads\\20220927', 'http://192.168.1.102:8888/uploads/20220927/91361841E4440055.jpg', '317.82kb', 'image/jpeg', '.jpg', NULL, '2022-09-27 17:39:21', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574736763719651328, 'leimu.jpg', '2C4F4441FB4710C3.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220927/2C4F4441FB4710C3.jpg', 'uploads\\20220927', 'http://192.168.1.102:8888/uploads/20220927/2C4F4441FB4710C3.jpg', '406.75kb', 'image/jpeg', '.jpg', NULL, '2022-09-27 20:24:36', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574948030577250304, '87833631_p2_master1200.jpg', '688F8F6171990714.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220928/688F8F6171990714.jpg', 'uploads\\20220928', 'http://192.168.1.102:8888/uploads/20220928/688F8F6171990714.jpg', '694.62kb', 'image/jpeg', '.jpg', NULL, '2022-09-28 10:24:06', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574948196533276672, '87833631_p2_master1200.jpg', 'DAF27A7621B935FB.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220928/DAF27A7621B935FB.jpg', 'uploads\\20220928', 'http://192.168.1.102:8888/uploads/20220928/DAF27A7621B935FB.jpg', '694.62kb', 'image/jpeg', '.jpg', NULL, '2022-09-28 10:24:46', 1, b'0'); +INSERT INTO `sys_file` VALUES (1574948452373237760, '87833631_p2_master1200.jpg', '72343C32263D1DBA.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220928/72343C32263D1DBA.jpg', 'uploads\\20220928', 'http://192.168.1.102:8888/uploads/20220928/72343C32263D1DBA.jpg', '694.62kb', 'image/jpeg', '.jpg', NULL, '2022-09-28 10:25:47', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575009080353886208, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', 'BA50C5F4E6A0E6F5.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220928/BA50C5F4E6A0E6F5.jpg', 'uploads\\20220928', 'http://192.168.1.102:8888/uploads/20220928/BA50C5F4E6A0E6F5.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-28 14:26:42', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575011305901920256, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', 'C4BBB48B1E8DE918.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220928/C4BBB48B1E8DE918.jpg', 'uploads\\20220928', 'http://192.168.1.102:8888/uploads/20220928/C4BBB48B1E8DE918.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-28 14:35:32', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575278414984777728, '90137533_p0_master1200.jpg', 'E1515B6B19EC9AB0.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220929/E1515B6B19EC9AB0.jpg', 'uploads\\20220929', 'http://192.168.1.102:8888/uploads/20220929/E1515B6B19EC9AB0.jpg', '694.71kb', 'image/jpeg', '.jpg', NULL, '2022-09-29 08:16:56', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575316838462656512, '65707174_p0_master1200.jpg', '1005BC498F76AE47.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220929/1005BC498F76AE47.jpg', 'uploads\\20220929', 'http://192.168.1.102:8888/uploads/20220929/1005BC498F76AE47.jpg', '686.26kb', 'image/jpeg', '.jpg', NULL, '2022-09-29 10:49:37', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575319323763937280, '65707174_p0_master1200.jpg', '4B129A51444B17BC.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/uploads/20220929/4B129A51444B17BC.jpg', 'uploads\\20220929', 'http://192.168.1.102:8888/uploads/20220929/4B129A51444B17BC.jpg', '686.26kb', 'image/jpeg', '.jpg', NULL, '2022-09-29 10:59:29', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575388889517002752, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', 'F8C40CFFD43CEFB3.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/avatar/20220929/F8C40CFFD43CEFB3.jpg', 'avatar\\20220929', 'http://localhost:8777/avatar/20220929/F8C40CFFD43CEFB3.jpg', '39.29kb', 'application/octet-stream', '.jpg', 'admin', '2022-09-29 15:35:55', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575388928989597696, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', 'AD2AEAB8A3F37142.jpg', 'C:/Users/PC/Desktop/.Net项目/chat_room/ARW-net/ARW.WebApi/wwwroot/avatar/20220929/AD2AEAB8A3F37142.jpg', 'avatar\\20220929', 'http://localhost:8777/avatar/20220929/AD2AEAB8A3F37142.jpg', '44.42kb', 'application/octet-stream', '.jpg', 'admin', '2022-09-29 15:36:05', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575675885103747072, 'profile.jpg', '760D68AB2CB08A69.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/760D68AB2CB08A69.jpg', 'uploads/20220930', 'http://localhost:8777/uploads/20220930/760D68AB2CB08A69.jpg', '1.82kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 10:36:20', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575677438543925248, 'profile.jpg', '19C3D9F11E7E741D.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/19C3D9F11E7E741D.jpg', 'uploads/20220930', 'http://47.242.159.172:8777/uploads/20220930/19C3D9F11E7E741D.jpg', '1.82kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 10:42:31', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575678658415300608, 'profile.jpg', 'BB374FB4935C5656.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/BB374FB4935C5656.jpg', 'uploads/20220930', 'http://chat.aerwen.net/dev-api//uploads/20220930/BB374FB4935C5656.jpg', '1.82kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 10:47:22', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575681558499692544, '82704116_p0_custom1200.jpg', '6B907D2E0BCE6EA2.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/6B907D2E0BCE6EA2.jpg', 'uploads/20220930', 'http://chat.aerwen.net/dev-api//uploads/20220930/6B907D2E0BCE6EA2.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 10:58:53', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575681831590825984, '14633947_ddc1368aad2367b01584e57ca36b8d00_170.jpg', '20EB1E8B20E71C50.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/20EB1E8B20E71C50.jpg', 'uploads/20220930', 'http://chat.aerwen.net/dev-api//uploads/20220930/20EB1E8B20E71C50.jpg', '33.18kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 10:59:58', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575682409855324160, '83492653_p0_master1200.jpg', 'DBFA4D5C1400236A.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/DBFA4D5C1400236A.jpg', 'uploads/20220930', 'http://chat.aerwen.net/dev-api//uploads/20220930/DBFA4D5C1400236A.jpg', '847.68kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 11:02:16', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575682518668152832, '90137533_p0_master1200.jpg', '43BD20558E763921.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/43BD20558E763921.jpg', 'uploads/20220930', 'http://chat.aerwen.net/dev-api//uploads/20220930/43BD20558E763921.jpg', '694.71kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 11:02:42', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575682759748358144, '73042381_p0_master1200.jpg', '24B1942F10A54CC0.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/24B1942F10A54CC0.jpg', 'uploads/20220930', 'http://chat.aerwen.net/dev-api//uploads/20220930/24B1942F10A54CC0.jpg', '770.22kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 11:03:39', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575684943730839552, '65707174_p0_master1200.jpg', 'D2508A7A0D33A8B2.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/D2508A7A0D33A8B2.jpg', 'uploads/20220930', 'http://chat.aerwen.net/dev-api//uploads/20220930/D2508A7A0D33A8B2.jpg', '686.26kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 11:12:20', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575685010562879488, '90137533_p0_master1200.jpg', '93215AB6B347EBA5.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/93215AB6B347EBA5.jpg', 'uploads/20220930', 'http://chat.aerwen.net/dev-api//uploads/20220930/93215AB6B347EBA5.jpg', '694.71kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 11:12:36', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575686138830655488, '90137533_p0_master1200.jpg', '26CFC0CCC39E314F.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/26CFC0CCC39E314F.jpg', 'uploads/20220930', 'http://chat.aerwen.net/dev-api//uploads/20220930/26CFC0CCC39E314F.jpg', '694.71kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 11:17:05', 1, b'0'); +INSERT INTO `sys_file` VALUES (1575686335153442816, '87833631_p2_master1200.jpg', 'C2BDA3807E801A94.jpg', '/home/www/chat_room/wwwroot/uploads/20220930/C2BDA3807E801A94.jpg', 'uploads/20220930', 'http://chat.aerwen.net/dev-api//uploads/20220930/C2BDA3807E801A94.jpg', '694.62kb', 'image/jpeg', '.jpg', NULL, '2022-09-30 11:17:52', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577555539162959872, '82704116_p0_custom1200.jpg', '83427ED2D61EEF86.jpg', '/home/www/chat_room/wwwroot/uploads/20221005/83427ED2D61EEF86.jpg', 'uploads/20221005', 'http://chat.aerwen.net/dev-api//uploads/20221005/83427ED2D61EEF86.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-10-05 15:05:25', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577556091632488448, '2.png', '8FF5C65E3A40EEE5.png', '/home/www/chat_room/wwwroot/uploads/20221005/8FF5C65E3A40EEE5.png', 'uploads/20221005', 'http://chat.aerwen.net/dev-api//uploads/20221005/8FF5C65E3A40EEE5.png', '651.99kb', 'image/png', '.png', NULL, '2022-10-05 15:07:36', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577561400312729600, '实时聊天演示.gif', '08566D9B9F7A7AD3.gif', '/home/www/chat_room/wwwroot/uploads/20221005/08566D9B9F7A7AD3.gif', 'uploads/20221005', 'http://chat.aerwen.net/dev-api//uploads/20221005/08566D9B9F7A7AD3.gif', '2807.85kb', 'image/gif', '.gif', NULL, '2022-10-05 15:28:42', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577563050762964992, '微信图片_20220829163217.jpg', 'DF04E1870E798B8F.jpg', '/home/www/chat_room/wwwroot/uploads/20221005/DF04E1870E798B8F.jpg', 'uploads/20221005', 'http://chat.aerwen.net/dev-api//uploads/20221005/DF04E1870E798B8F.jpg', '133.41kb', 'image/jpeg', '.jpg', NULL, '2022-10-05 15:35:16', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577565067921199104, '65707174_p0_master1200.jpg', '62393595726C8E03.jpg', '/home/www/chat_room/wwwroot/uploads/20221005/62393595726C8E03.jpg', 'uploads/20221005', 'http://chat.aerwen.net/dev-api//uploads/20221005/62393595726C8E03.jpg', '686.26kb', 'image/jpeg', '.jpg', NULL, '2022-10-05 15:43:17', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577899560028737536, '登录界面.jpg', '0D2F813792477BD3.jpg', '/home/www/chat_room/wwwroot/demo/20221006/0D2F813792477BD3.jpg', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/0D2F813792477BD3.jpg', '72.17kb', 'image/jpeg', '.jpg', 'admin', '2022-10-06 13:52:26', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577899829772816384, '封面.jpg', '6DBDBD2A199FEDA8.jpg', '/home/www/chat_room/wwwroot/demo/20221006/6DBDBD2A199FEDA8.jpg', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/6DBDBD2A199FEDA8.jpg', '48.62kb', 'image/jpeg', '.jpg', 'admin', '2022-10-06 13:53:30', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577899906377584640, '个人中心.jpg', '571DD0F61CDA4A1F.jpg', '/home/www/chat_room/wwwroot/demo/20221006/571DD0F61CDA4A1F.jpg', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/571DD0F61CDA4A1F.jpg', '92.04kb', 'image/jpeg', '.jpg', 'admin', '2022-10-06 13:53:48', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577899976057556992, '好友简介.jpg', '0331C0145A6142ED.jpg', '/home/www/chat_room/wwwroot/demo/20221006/0331C0145A6142ED.jpg', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/0331C0145A6142ED.jpg', '86.85kb', 'image/jpeg', '.jpg', 'admin', '2022-10-06 13:54:05', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577900090935349248, '好友申请.jpg', '43D09F04486C3611.jpg', '/home/www/chat_room/wwwroot/demo/20221006/43D09F04486C3611.jpg', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/43D09F04486C3611.jpg', '93.83kb', 'image/jpeg', '.jpg', 'admin', '2022-10-06 13:54:32', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577900153921212416, '后台管理页面.jpg', '25E52844BCAE8975.jpg', '/home/www/chat_room/wwwroot/demo/20221006/25E52844BCAE8975.jpg', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/25E52844BCAE8975.jpg', '89.28kb', 'image/jpeg', '.jpg', 'admin', '2022-10-06 13:54:47', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577900195516125184, '后台首页.jpg', '46AC0DC4C3DFE9FD.jpg', '/home/www/chat_room/wwwroot/demo/20221006/46AC0DC4C3DFE9FD.jpg', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/46AC0DC4C3DFE9FD.jpg', '152.91kb', 'image/jpeg', '.jpg', 'admin', '2022-10-06 13:54:57', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577900263874891776, '后台账户管理.jpg', 'C9E4F43B3CA85215.jpg', '/home/www/chat_room/wwwroot/demo/20221006/C9E4F43B3CA85215.jpg', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/C9E4F43B3CA85215.jpg', '101.24kb', 'image/jpeg', '.jpg', 'admin', '2022-10-06 13:55:14', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577900313690640384, '聊天截图.jpg', '47FA28F82C08E7A7.jpg', '/home/www/chat_room/wwwroot/demo/20221006/47FA28F82C08E7A7.jpg', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/47FA28F82C08E7A7.jpg', '87.19kb', 'image/jpeg', '.jpg', 'admin', '2022-10-06 13:55:25', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577900678834163712, '聊天首页.jpg', '07E1DAB722B6AF59.jpg', '/home/www/chat_room/wwwroot/demo/20221006/07E1DAB722B6AF59.jpg', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/07E1DAB722B6AF59.jpg', '62.19kb', 'image/jpeg', '.jpg', 'admin', '2022-10-06 13:56:52', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577901383485624320, '注册流程.gif', 'E1F0C02868B80C90.gif', '/home/www/chat_room/wwwroot/demo/20221006/E1F0C02868B80C90.gif', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/E1F0C02868B80C90.gif', '5155.28kb', 'image/gif', '.gif', 'admin', '2022-10-06 13:59:40', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577902139441811456, '实时聊天演示.gif', '1126A7957679CDDB.gif', '/home/www/chat_room/wwwroot/demo/20221006/1126A7957679CDDB.gif', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/1126A7957679CDDB.gif', '2807.85kb', 'image/gif', '.gif', 'admin', '2022-10-06 14:02:41', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577992787759075328, '群聊演示.gif', '928D9CF4B92CEDB5.gif', '/home/www/chat_room/wwwroot/demo/20221006/928D9CF4B92CEDB5.gif', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/928D9CF4B92CEDB5.gif', '3911.49kb', 'image/gif', '.gif', 'admin', '2022-10-06 20:02:53', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577993039266320384, '上传图片.gif', '9993196E456C7AEE.gif', '/home/www/chat_room/wwwroot/uploads/20221006/9993196E456C7AEE.gif', 'uploads/20221006', 'http://chat.aerwen.net/dev-api//uploads/20221006/9993196E456C7AEE.gif', '2005.04kb', 'image/gif', '.gif', 'admin', '2022-10-06 20:03:53', 1, b'0'); +INSERT INTO `sys_file` VALUES (1577994372488761344, 'emjoi表情包.gif', 'A7A24DAC5D504955.gif', '/home/www/chat_room/wwwroot/demo/20221006/A7A24DAC5D504955.gif', 'demo/20221006', 'http://chat.aerwen.net/dev-api//demo/20221006/A7A24DAC5D504955.gif', '3821.68kb', 'image/gif', '.gif', 'admin', '2022-10-06 20:09:11', 1, b'0'); +INSERT INTO `sys_file` VALUES (1578564342742388736, 'f111400bd78f7e5a67cc2362fb6df8e.jpg', '9E46A44EDA552056.jpg', '/home/www/chat_room/wwwroot/demo/20221008/9E46A44EDA552056.jpg', 'demo/20221008', 'http://chat.aerwen.net/dev-api//demo/20221008/9E46A44EDA552056.jpg', '69.2kb', 'image/jpeg', '.jpg', 'admin', '2022-10-08 09:54:02', 1, b'0'); +INSERT INTO `sys_file` VALUES (1578565664837341184, '82704116_p0_custom1200.jpg', 'D3E60CAAC0CBFA4B.jpg', '/home/www/chat_room/wwwroot/uploads/20221008/D3E60CAAC0CBFA4B.jpg', 'uploads/20221008', 'http://chat.aerwen.net/dev-api//uploads/20221008/D3E60CAAC0CBFA4B.jpg', '14.87kb', 'image/jpeg', '.jpg', NULL, '2022-10-08 09:59:17', 1, b'0'); +INSERT INTO `sys_file` VALUES (1578673897165950976, '80481750_p0_master1200.jpg', '0C3F3D49CF5927C1.jpg', '/home/www/chat_room/wwwroot/uploads/20221008/0C3F3D49CF5927C1.jpg', 'uploads/20221008', 'http://chat.aerwen.net/dev-api//uploads/20221008/0C3F3D49CF5927C1.jpg', '456.53kb', 'image/jpeg', '.jpg', NULL, '2022-10-08 17:09:22', 1, b'0'); + +-- ---------------------------- +-- Table structure for sys_logininfor +-- ---------------------------- +DROP TABLE IF EXISTS `sys_logininfor`; +CREATE TABLE `sys_logininfor` ( + `infoId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '访问ID', + `userName` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `ipaddr` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `loginLocation` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `browser` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `os` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `status` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `loginTime` datetime(0) NOT NULL, + PRIMARY KEY (`infoId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 91 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_logininfor +-- ---------------------------- +INSERT INTO `sys_logininfor` VALUES (17, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-07-26 10:30:56'); +INSERT INTO `sys_logininfor` VALUES (18, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-07-26 10:34:10'); +INSERT INTO `sys_logininfor` VALUES (19, 'zr', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-07-26 11:07:19'); +INSERT INTO `sys_logininfor` VALUES (20, 'zr', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-07-26 11:29:33'); +INSERT INTO `sys_logininfor` VALUES (21, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-07-26 11:29:42'); +INSERT INTO `sys_logininfor` VALUES (22, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-07-26 19:21:35'); +INSERT INTO `sys_logininfor` VALUES (23, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-07-27 11:02:54'); +INSERT INTO `sys_logininfor` VALUES (24, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-07-27 15:53:09'); +INSERT INTO `sys_logininfor` VALUES (25, 'admin', '219.130.185.182', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-07-28 10:33:43'); +INSERT INTO `sys_logininfor` VALUES (26, 'admin', '120.237.13.90', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-07-28 14:10:07'); +INSERT INTO `sys_logininfor` VALUES (27, 'admin', '120.237.13.90', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-07-28 14:23:55'); +INSERT INTO `sys_logininfor` VALUES (28, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-07-28 14:29:13'); +INSERT INTO `sys_logininfor` VALUES (29, 'admim', '219.130.185.182', '广东省-佛山市', 'XiaoMi Redmi K30 Pro', 'Android 11', '1', '用户名或密码错误', '2022-07-28 14:54:16'); +INSERT INTO `sys_logininfor` VALUES (30, 'admin', '219.130.185.182', '广东省-佛山市', 'XiaoMi Redmi K30 Pro', 'Android 11', '0', '登录成功', '2022-07-28 14:54:20'); +INSERT INTO `sys_logininfor` VALUES (31, 'admin', '112.195.173.211', '四川省-遂宁市', 'Oppo PCPM00', 'Android 11', '0', '登录成功', '2022-07-28 14:56:54'); +INSERT INTO `sys_logininfor` VALUES (32, 'admin', '219.130.185.182', '广东省-佛山市', 'XiaoMi Redmi K30 Pro', 'Android 11', '0', '登录成功', '2022-07-28 16:55:00'); +INSERT INTO `sys_logininfor` VALUES (33, 'admin', '219.130.185.243', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-07-29 09:38:04'); +INSERT INTO `sys_logininfor` VALUES (34, 'admin', '219.130.185.243', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-07-29 09:38:20'); +INSERT INTO `sys_logininfor` VALUES (35, 'admin', '219.130.185.243', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-07-29 17:15:33'); +INSERT INTO `sys_logininfor` VALUES (36, 'admin', '117.136.31.35', '广东省-广州市', 'XiaoMi Redmi K30 Pro', 'Android 11', '0', '登录成功', '2022-07-29 19:53:42'); +INSERT INTO `sys_logininfor` VALUES (37, 'admin', '183.24.21.3', '广东省-广州市', 'Other', 'Windows 10', '0', '登录成功', '2022-07-29 22:08:19'); +INSERT INTO `sys_logininfor` VALUES (38, 'admin', '183.24.21.3', '广东省-广州市', 'Other', 'Windows 7', '0', '登录成功', '2022-07-30 14:50:47'); +INSERT INTO `sys_logininfor` VALUES (39, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-08-01 09:53:20'); +INSERT INTO `sys_logininfor` VALUES (40, 'admin', '219.130.184.161', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-08-02 14:16:01'); +INSERT INTO `sys_logininfor` VALUES (41, 'admin', '120.237.13.90', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-08-02 16:13:12'); +INSERT INTO `sys_logininfor` VALUES (42, 'admin', '223.104.218.53', '0-0', 'Other', 'Linux', '0', '登录成功', '2022-08-02 16:25:08'); +INSERT INTO `sys_logininfor` VALUES (43, 'admin', '117.136.31.93', '广东省-广州市', 'XiaoMi Redmi K30 Pro', 'Android 11', '0', '登录成功', '2022-08-02 18:52:45'); +INSERT INTO `sys_logininfor` VALUES (44, 'admin', '219.130.184.161', '广东省-佛山市', 'Other', 'Windows 10', '1', '用户名或密码错误', '2022-08-02 22:45:21'); +INSERT INTO `sys_logininfor` VALUES (45, 'admin', '219.130.184.161', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-08-02 22:45:43'); +INSERT INTO `sys_logininfor` VALUES (46, 'admin', '173.82.57.16', '加利福尼亚-洛杉矶', 'Other', 'Windows 10', '0', '登录成功', '2022-08-03 22:14:31'); +INSERT INTO `sys_logininfor` VALUES (47, 'admin', '120.238.219.231', '广东省-湛江市', 'Other', 'Windows 10', '0', '登录成功', '2022-08-05 20:49:02'); +INSERT INTO `sys_logininfor` VALUES (48, 'admin', '219.130.187.6', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-08-08 21:15:47'); +INSERT INTO `sys_logininfor` VALUES (49, 'admin', '223.104.69.12', '广东省-东莞市', 'XiaoMi Redmi K30 Pro', 'Android 12', '0', '登录成功', '2022-08-08 23:09:37'); +INSERT INTO `sys_logininfor` VALUES (50, 'admin', '113.69.249.160', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-08-11 09:39:31'); +INSERT INTO `sys_logininfor` VALUES (51, 'admin', '113.69.249.160', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-08-12 09:48:49'); +INSERT INTO `sys_logininfor` VALUES (52, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-08-15 16:59:07'); +INSERT INTO `sys_logininfor` VALUES (53, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-08-16 15:44:01'); +INSERT INTO `sys_logininfor` VALUES (54, 'admin', '219.130.184.43', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-08-16 16:19:38'); +INSERT INTO `sys_logininfor` VALUES (55, 'admin', '223.104.76.36', '广东省-东莞市', 'Other', 'Windows 10', '0', '登录成功', '2022-08-18 21:21:04'); +INSERT INTO `sys_logininfor` VALUES (56, 'admin', '223.104.76.36', '广东省-东莞市', 'XiaoMi Redmi K30 Pro', 'Android 12', '0', '登录成功', '2022-08-18 23:34:53'); +INSERT INTO `sys_logininfor` VALUES (57, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-08-19 14:56:21'); +INSERT INTO `sys_logininfor` VALUES (58, 'admin', '120.237.13.90', '广东省-佛山市', 'XiaoMi Redmi K30 Pro', 'Android 12', '0', '登录成功', '2022-08-19 15:51:35'); +INSERT INTO `sys_logininfor` VALUES (59, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-08-19 17:24:34'); +INSERT INTO `sys_logininfor` VALUES (60, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-08-19 20:12:05'); +INSERT INTO `sys_logininfor` VALUES (61, 'zr', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-08-19 21:12:35'); +INSERT INTO `sys_logininfor` VALUES (62, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-08-19 21:22:03'); +INSERT INTO `sys_logininfor` VALUES (63, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-08-19 21:22:28'); +INSERT INTO `sys_logininfor` VALUES (64, 'admin', '120.197.197.48', '广东省-东莞市', 'XiaoMi Redmi K30 Pro', 'Android 12', '0', '登录成功', '2022-08-22 23:05:15'); +INSERT INTO `sys_logininfor` VALUES (65, 'admin', '219.130.187.190', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-08-23 14:21:27'); +INSERT INTO `sys_logininfor` VALUES (66, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-08-24 15:28:04'); +INSERT INTO `sys_logininfor` VALUES (67, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-09-06 10:56:07'); +INSERT INTO `sys_logininfor` VALUES (68, 'zr', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-09-06 10:57:12'); +INSERT INTO `sys_logininfor` VALUES (69, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-09-06 11:06:14'); +INSERT INTO `sys_logininfor` VALUES (70, 'zr', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-09-06 11:06:16'); +INSERT INTO `sys_logininfor` VALUES (71, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-09-06 15:49:31'); +INSERT INTO `sys_logininfor` VALUES (72, 'admin', '192.168.1.102', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-09-26 09:00:06'); +INSERT INTO `sys_logininfor` VALUES (73, 'admin', '192.168.1.102', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-09-26 10:27:43'); +INSERT INTO `sys_logininfor` VALUES (74, 'admin', '192.168.1.102', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-09-29 08:33:58'); +INSERT INTO `sys_logininfor` VALUES (75, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-09-29 11:24:16'); +INSERT INTO `sys_logininfor` VALUES (76, 'aerwen', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '1', '用户名或密码错误', '2022-09-29 14:10:06'); +INSERT INTO `sys_logininfor` VALUES (77, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-09-29 14:10:13'); +INSERT INTO `sys_logininfor` VALUES (78, 'admin', '127.0.0.1', '0-内网IP', 'Other', 'Windows 10', '0', '登录成功', '2022-09-29 15:31:11'); +INSERT INTO `sys_logininfor` VALUES (79, 'admin', '120.237.13.90', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-09-30 10:12:58'); +INSERT INTO `sys_logininfor` VALUES (80, 'admin', '120.237.13.90', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-09-30 10:13:18'); +INSERT INTO `sys_logininfor` VALUES (81, 'admin', '120.237.13.90', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-09-30 11:20:35'); +INSERT INTO `sys_logininfor` VALUES (82, 'admin', '120.197.198.57', '广东省-东莞市', 'XiaoMi Redmi K30 Pro', 'Android 12', '0', '登录成功', '2022-09-30 11:33:38'); +INSERT INTO `sys_logininfor` VALUES (83, 'admin', '120.84.12.182', '广东省-佛山市', 'XiaoMi Redmi K30 Pro', 'Android 12', '0', '登录成功', '2022-09-30 22:48:19'); +INSERT INTO `sys_logininfor` VALUES (84, 'admin', '120.84.12.250', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-10-05 15:50:42'); +INSERT INTO `sys_logininfor` VALUES (85, 'admin', '120.84.12.250', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-10-05 15:53:41'); +INSERT INTO `sys_logininfor` VALUES (86, 'admin', '120.84.12.182', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-10-06 13:49:26'); +INSERT INTO `sys_logininfor` VALUES (87, 'admin', '120.237.13.90', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-10-08 09:53:47'); +INSERT INTO `sys_logininfor` VALUES (88, 'admin', '120.237.13.90', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-10-08 11:53:26'); +INSERT INTO `sys_logininfor` VALUES (89, 'zr', '120.237.13.90', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-10-08 11:53:47'); +INSERT INTO `sys_logininfor` VALUES (90, 'admin', '120.84.12.229', '广东省-佛山市', 'Other', 'Windows 10', '0', '登录成功', '2022-10-08 21:26:07'); + +-- ---------------------------- +-- Table structure for sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_menu`; +CREATE TABLE `sys_menu` ( + `menuId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单ID', + `menuName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称', + `parentId` bigint(20) NOT NULL, + `orderNum` int(11) NOT NULL, + `path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `component` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `isFrame` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `isCache` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `menuType` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `visible` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `status` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `perms` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `icon` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + `menuName_key` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`menuId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2032 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_menu +-- ---------------------------- +INSERT INTO `sys_menu` VALUES (1, '系统管理', 0, 97, 'system', NULL, '0', '0', 'M', '0', '0', '', 'ele-Tools', '', '2022-07-09 21:19:35', 'admin', '2022-07-26 12:00:22', NULL, 'menu.system', b'0'); +INSERT INTO `sys_menu` VALUES (2, '系统监控', 0, 99, 'monitor', NULL, '0', '0', 'M', '0', '0', '', 'ele-TrendCharts', '', '2022-07-09 21:19:35', 'admin', '2022-07-26 11:54:24', NULL, 'menu.monitoring', b'0'); +INSERT INTO `sys_menu` VALUES (3, '系统工具', 0, 98, 'tool', NULL, '0', '0', 'M', '0', '0', '', 'ele-Platform', '', '2022-07-09 21:19:35', 'admin', '2022-07-26 11:59:57', NULL, 'menu.systemTools', b'0'); +INSERT INTO `sys_menu` VALUES (5, '外部打开', 0, 99, 'http://www.izhaorui.cn', NULL, '1', '0', 'M', '1', '0', '', 'link', '', '2022-07-09 21:19:35', 'admin', '2022-09-29 19:23:38', NULL, 'menu.officialWebsite', b'0'); +INSERT INTO `sys_menu` VALUES (6, '控制台', 0, 0, 'dashboard', 'dashboard/PanelGroup', '0', '0', 'C', '1', '0', '', 'dashboard', '', '2022-07-09 21:19:35', 'admin', '2022-09-29 15:35:30', NULL, 'menu.dashboard', b'0'); +INSERT INTO `sys_menu` VALUES (100, '用户管理', 1, 1, 'user', 'system/user/index', '0', '0', 'C', '0', '0', 'system:user:list', 'user', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.systemUser', NULL); +INSERT INTO `sys_menu` VALUES (101, '角色管理', 1, 2, 'role', 'system/role/index', '0', '0', 'C', '0', '0', 'system:role:list', 'peoples', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.systemRole', NULL); +INSERT INTO `sys_menu` VALUES (102, '菜单管理', 1, 3, 'menu', 'system/menu/index', '0', '0', 'C', '0', '0', 'system:menu:list', 'tree-table', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.systemMenu', NULL); +INSERT INTO `sys_menu` VALUES (103, '部门管理', 1, 4, 'dept', 'system/dept/index', '0', '0', 'C', '1', '0', 'system:dept:list', 'tree', '', '2022-07-09 21:19:35', 'admin', '2022-07-26 11:31:14', NULL, 'menu.systemDept', b'0'); +INSERT INTO `sys_menu` VALUES (104, '岗位管理', 1, 5, 'post', 'system/post/index', '0', '0', 'C', '1', '0', 'system:post:list', 'post', '', '2022-07-09 21:19:35', 'admin', '2022-07-26 11:31:17', NULL, 'menu.systemPost', b'0'); +INSERT INTO `sys_menu` VALUES (105, '字典管理', 1, 6, 'dict', 'system/dict/index', '0', '0', 'C', '0', '0', 'system:dict:list', 'dict', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.systemDic', NULL); +INSERT INTO `sys_menu` VALUES (106, '角色分配', 1, 2, 'roleusers', 'system/roleusers/index', '0', '0', 'C', '1', '0', 'system:roleusers:list', 'people', '', '2022-07-09 21:19:35', 'admin', '2022-07-26 11:30:10', NULL, '', b'0'); +INSERT INTO `sys_menu` VALUES (107, '参数设置', 1, 8, 'config', 'system/config/index', '0', '0', 'C', '0', '0', 'system:config:list', 'edit', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.systemParam', NULL); +INSERT INTO `sys_menu` VALUES (108, '日志管理', 1, 10, 'log', '', '0', '0', 'M', '0', '0', '', 'log', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.systemLog', NULL); +INSERT INTO `sys_menu` VALUES (109, '通知公告', 1, 9, 'notice', 'system/notice/index', '0', '0', 'C', '0', '0', 'system:notice:list', 'message', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.systemNotice', NULL); +INSERT INTO `sys_menu` VALUES (110, '定时任务', 2, 1, 'job', 'monitor/job/index', '0', '0', 'C', '0', '0', '', 'job', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.timedTask', NULL); +INSERT INTO `sys_menu` VALUES (112, '服务监控', 2, 4, 'server', 'monitor/server/index', '0', '0', 'C', '0', '0', 'monitor:server:list', 'server', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.serviceMonitor', NULL); +INSERT INTO `sys_menu` VALUES (113, '缓存监控', 2, 5, 'cache', 'monitor/cache/index', '0', '0', 'C', '1', '1', 'monitor:cache:list', 'redis', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.cacheMonitor', NULL); +INSERT INTO `sys_menu` VALUES (116, '系统接口', 3, 3, 'swagger', 'tool/swagger/index', '0', '0', 'C', '0', '0', 'tool:swagger:list', 'swagger', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.systemInterface', NULL); +INSERT INTO `sys_menu` VALUES (117, '发送邮件', 3, 4, 'sendEmail', 'tool/email/sendEmail', '0', '0', 'C', '0', '0', 'tool:email:send', 'email', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.sendEmail', NULL); +INSERT INTO `sys_menu` VALUES (500, '操作日志', 108, 1, 'operlog', 'monitor/operlog/index', '0', '0', 'C', '0', '0', 'monitor:operlog:list', 'form', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.operLog', NULL); +INSERT INTO `sys_menu` VALUES (501, '登录日志', 108, 2, 'logininfor', 'monitor/logininfor/index', '0', '0', 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', '', '2022-07-09 21:19:35', '', NULL, '', 'menu.loginLog', NULL); +INSERT INTO `sys_menu` VALUES (1001, '用户查询', 100, 1, '', '', '0', '0', 'F', '0', '0', 'system:user:query', '', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1002, '用户添加', 100, 2, '', '', '0', '0', 'F', '0', '0', 'system:user:add', '', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1003, '用户修改', 100, 3, '', '', '0', '0', 'F', '0', '0', 'system:user:edit', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1004, '用户删除', 100, 4, '', '', '0', '0', 'F', '0', '0', 'system:user:delete', '', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1005, '用户导出', 100, 5, '', '', '0', '0', 'F', '0', '0', 'system:user:export', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1006, '用户导入', 100, 6, '', '', '0', '0', 'F', '0', '0', 'system:user:import', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1007, '重置密码', 100, 7, '', '', '0', '0', 'F', '0', '0', 'system:user:resetPwd', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1008, '角色查询', 101, 1, '', '', '0', '0', 'F', '0', '0', 'system:role:query', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1009, '角色新增', 101, 2, '', '', '0', '0', 'F', '0', '0', 'system:role:add', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1010, '角色修改', 101, 3, '', '', '0', '0', 'F', '0', '0', 'system:role:edit', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1011, '角色删除', 101, 4, '', '', '0', '0', 'F', '0', '0', 'system:role:remove', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1012, '菜单授权', 101, 5, '', '', '0', '0', 'F', '0', '0', 'system:role:authorize', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1013, '菜单查询', 102, 1, '', '', '0', '0', 'F', '0', '0', 'system:menu:query', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1014, '菜单新增', 102, 2, '', '', '0', '0', 'F', '0', '0', 'system:menu:add', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1015, '菜单修改', 102, 3, '', '', '0', '0', 'F', '0', '0', 'system:menu:edit', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1016, '菜单删除', 102, 4, '', '', '0', '0', 'F', '0', '0', 'system:menu:remove', '#', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1017, '修改排序', 102, 5, '', '', '0', '0', 'F', '0', '0', 'system:menu:changeSort', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1018, '部门查询', 103, 1, '', '', '0', '0', 'F', '0', '0', 'system:dept:query', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1019, '部门新增', 103, 2, '', '', '0', '0', 'F', '0', '0', 'system:dept:add', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1020, '部门修改', 103, 3, '', '', '0', '0', 'F', '0', '0', 'system:dept:update', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1021, '部门删除', 103, 4, '', '', '0', '0', 'F', '0', '0', 'system:dept:remove', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1022, '岗位查询', 104, 1, '', '', '0', '0', 'F', '0', '0', 'system:post:list', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1023, '岗位添加', 104, 2, '', '', '0', '0', 'F', '0', '0', 'system:post:add', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1024, '岗位删除', 104, 3, '', '', '0', '0', 'F', '0', '0', 'system:post:remove', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1025, '岗位编辑', 104, 4, '', '', '0', '0', 'F', '0', '0', 'system:post:edit', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1026, '字典新增', 105, 1, '', '', '0', '0', 'F', '0', '0', 'system:dict:add', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1027, '字典修改', 105, 2, '', '', '0', '0', 'F', '0', '0', 'system:dict:edit', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1028, '字典删除', 105, 3, '', '', '0', '0', 'F', '0', '0', 'system:dict:remove', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1029, '新增用户', 106, 1, '', '', '0', '0', 'F', '0', '0', 'system:roleusers:add', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1030, '删除用户', 106, 2, '', '', '0', '0', 'F', '0', '0', 'system:roleusers:del', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1032, '任务查询', 110, 1, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:job:list', '#', 'admin', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1033, '任务新增', 110, 2, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:job:add', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1034, '任务删除', 110, 3, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:job:delete', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1035, '任务修改', 110, 4, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:job:edit', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1036, '任务启动', 110, 5, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:job:start', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1037, '任务运行', 110, 7, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:job:run', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1038, '任务停止', 110, 8, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:job:stop', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1039, '任务日志', 2, 0, 'job/log', 'monitor/job/log', '0', '0', 'C', '1', '0', 'monitor:job:query', 'log', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1040, '任务导出', 110, 10, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:job:export', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1041, '操作查询', 500, 1, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:operlog:query', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1042, '操作删除', 500, 2, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:operlog:remove', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1043, '操作日志导出', 500, 3, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:operlog:export', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1044, '登录查询', 501, 1, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:logininfor:query', '', 'admin', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1045, '登录删除', 501, 1, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:logininfor:remove', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1046, '登录日志导出', 501, 1, '#', NULL, '0', '0', 'F', '0', '0', 'monitor:logininfor:export', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1051, '查询公告', 109, 1, '#', NULL, '0', '0', 'F', '0', '0', 'system:notice:query', '', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1052, '新增公告', 109, 2, '#', NULL, '0', '0', 'F', '0', '0', 'system:notice:add', '', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1053, '删除公告', 109, 3, '#', NULL, '0', '0', 'F', '0', '0', 'system:notice:delete', '', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1054, '修改公告', 109, 4, '#', NULL, '0', '0', 'F', '0', '0', 'system:notice:update', '', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1055, '导出公告', 109, 5, '#', NULL, '0', '0', 'F', '0', '0', 'system:notice:export', '', '', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1060, '生成修改', 3, 1, '/gen/editTable', '', '0', '0', 'C', '1', '1', 'tool:gen:edit', '', '', '2022-07-09 21:19:35', 'admin', '2022-07-22 17:30:58', NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1061, '生成查询', 115, 2, '#', NULL, '0', '0', 'F', '0', '0', 'tool:gen:query', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1062, '生成删除', 115, 1, '#', NULL, '0', '0', 'F', '0', '0', 'tool:gen:remove', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1063, '导入代码', 115, 1, '#', NULL, '0', '0', 'F', '0', '0', 'tool:gen:import', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1064, '生成代码', 115, 1, '#', NULL, '0', '0', 'F', '0', '0', 'tool:gen:code', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1065, '预览代码', 115, 1, '#', NULL, '0', '0', 'F', '0', '0', 'tool:gen:preview', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1070, '岗位导出', 104, 4, '', '', '0', '0', 'F', '0', '0', 'system:post:export', '', '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1071, '字典导出', 105, 4, '', '', '0', '0', 'F', '0', '0', 'system:dict:export', NULL, '', '2022-07-09 21:19:35', '', NULL, NULL, '', NULL); +INSERT INTO `sys_menu` VALUES (1072, '文件存储', 3, 17, 'file', 'tool/file/index', '0', '0', 'C', '0', '0', 'tool:file:list', 'upload', '', '1900-01-01 00:00:00', '', NULL, '文件存储菜单', 'menu.fileStorage', NULL); +INSERT INTO `sys_menu` VALUES (1073, '查询', 1072, 1, '#', NULL, '0', '0', 'F', '0', '0', 'tool:file:query', '', '', '1900-01-01 00:00:00', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1074, '新增', 1072, 2, '#', NULL, '0', '0', 'F', '0', '0', 'tool:file:add', '', '', '1900-01-01 00:00:00', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1075, '删除', 1072, 3, '#', NULL, '0', '0', 'F', '0', '0', 'tool:file:delete', '', '', '1900-01-01 00:00:00', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1076, '修改', 1072, 4, '#', NULL, '0', '0', 'F', '0', '0', 'tool:file:update', '', '', '1900-01-01 00:00:00', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1077, '导出', 1072, 5, '#', NULL, '0', '0', 'F', '0', '0', 'tool:file:export', '', '', '1900-01-01 00:00:00', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1078, '多语言配置', 1, 999, 'CommonLang', 'system/commonLang/index', '0', '0', 'C', '0', '0', 'system:lang:list', 'language', 'system', '2022-07-09 21:19:35', '', NULL, '', 'menu.systemLang', NULL); +INSERT INTO `sys_menu` VALUES (1079, '查询', 1078, 1, '#', NULL, '0', '0', 'F', '0', '0', 'system:lang:query', '', 'system', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1080, '新增', 1078, 2, '#', NULL, '0', '0', 'F', '0', '0', 'system:lang:add', '', 'system', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1081, '删除', 1078, 3, '#', NULL, '0', '0', 'F', '0', '0', 'system:lang:delete', '', 'system', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1082, '修改', 1078, 4, '#', NULL, '0', '0', 'F', '0', '0', 'system:lang:edit', '', 'system', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1083, '导出', 1078, 5, '#', NULL, '0', '0', 'F', '0', '0', 'system:lang:export', '', 'system', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1085, '查询', 1084, 1, '#', NULL, '0', '0', 'F', '0', '0', 'articlecategory:query', '', 'system', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1086, '新增', 1084, 2, '#', NULL, '0', '0', 'F', '0', '0', 'articlecategory:add', '', 'system', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (1087, '删除', 1084, 3, '#', NULL, '0', '0', 'F', '0', '0', 'articlecategory:delete', '', 'system', '2022-07-09 21:19:35', '', NULL, '', '', NULL); +INSERT INTO `sys_menu` VALUES (2016, '学校管理', 0, 1, 'school', NULL, '0', '0', 'M', '1', '0', NULL, 'ele-School', 'admin', '2022-07-26 10:37:51', 'admin', '2022-09-29 15:17:06', NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2017, '学生管理', 2016, 1, 'student', 'business/school/student/index', '0', '0', 'C', '0', '0', 'business:student:list', '', 'admin', '2022-07-26 10:38:48', 'admin', '2022-07-26 10:40:35', NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2018, '班级管理', 2016, 2, 'class', 'business/school/class/index', '0', '0', 'C', '0', '0', 'business:class:list', '', 'admin', '2022-07-26 10:48:09', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2019, '添加学生', 2017, 999, '#', NULL, '0', '0', 'F', '0', '0', 'business:student:add', '', 'admin', '2022-07-26 11:04:11', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2020, '修改学生', 2017, 999, '#', NULL, '0', '0', 'F', '0', '0', 'business:student:update', '', 'admin', '2022-07-26 11:04:45', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2021, '删除学生', 2017, 999, '#', NULL, '0', '0', 'F', '0', '0', 'business:student:delete', '', 'admin', '2022-07-26 11:05:49', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2022, '导入学生', 2017, 999, '#', NULL, '0', '0', 'F', '0', '0', 'business:student:import', '', 'admin', '2022-07-26 11:06:20', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2023, '导出学生', 2017, 999, '#', NULL, '0', '0', 'F', '0', '0', 'business:student:export', '', 'admin', '2022-07-26 11:06:45', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2024, '班级下拉框', 2017, 999, '#', NULL, '0', '0', 'F', '0', '0', 'business:student:classlist', '', 'admin', '2022-07-26 11:07:07', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2025, '添加班级', 2018, 999, '#', NULL, '0', '0', 'F', '0', '0', 'business:class:add', '', 'admin', '2022-07-26 11:48:21', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2026, '修改班级', 2018, 999, '#', NULL, '0', '0', 'F', '0', '0', 'business:class:update', '', 'admin', '2022-07-26 11:48:42', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2027, '删除班级', 2018, 999, '#', NULL, '0', '0', 'F', '0', '0', 'business:class:delete', '', 'admin', '2022-07-26 11:49:04', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2028, '产品管理', 0, 2, 'product', NULL, '0', '0', 'M', '1', '0', NULL, 'ele-ShoppingBag', 'admin', '2022-07-26 11:58:44', 'admin', '2022-09-29 15:17:10', NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2029, '产品类型', 2028, 1, 'productType', 'business/product/productType/index', '0', '0', 'C', '0', '0', 'business:productType:treeList', '', 'admin', '2022-07-26 14:21:13', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2030, '聊天室', 3, 999, 'chat', 'tool/chat/index', '0', '0', 'C', '0', '0', NULL, 'phone', 'admin', '2022-08-19 20:24:37', '', NULL, NULL, NULL, b'0'); +INSERT INTO `sys_menu` VALUES (2031, '聊天室用户管理', 0, 3, 'chatUser', 'business/chatUser/index', '0', '0', 'C', '0', '0', 'business:chatUser:list', 'ele-Avatar', 'admin', '2022-09-29 15:18:53', 'admin', '2022-09-29 15:32:28', NULL, 'menu.chatUser', b'0'); + +-- ---------------------------- +-- Table structure for sys_notice +-- ---------------------------- +DROP TABLE IF EXISTS `sys_notice`; +CREATE TABLE `sys_notice` ( + `notice_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '公告ID', + `notice_title` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `notice_type` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `notice_content` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '公告状态(0正常 1关闭)', + `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注', + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`notice_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_notice +-- ---------------------------- +INSERT INTO `sys_notice` VALUES (1, 'hello word', '2', '

ASdA dasd weq eqwedasd

', '0', 'admin', '2022-08-19 15:55:41', '', NULL, NULL, NULL); +INSERT INTO `sys_notice` VALUES (2, 'dfg', '1', '

drte

', '0', 'admin', '2022-08-19 15:56:12', '', NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_oper_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_oper_log`; +CREATE TABLE `sys_oper_log` ( + `operId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志主键', + `title` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `businessType` int(11) NOT NULL DEFAULT 0, + `method` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `requestMethod` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `operatorType` int(11) NOT NULL DEFAULT 0, + `operName` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `deptName` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `operUrl` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `operIP` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机地址', + `operLocation` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `operParam` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `jsonResult` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `status` int(11) NOT NULL DEFAULT 0, + `errorMsg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `operTime` datetime(0) NOT NULL, + `elapsed` bigint(20) NULL DEFAULT NULL COMMENT '请求用时', + PRIMARY KEY (`operId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 762 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_oper_log +-- ---------------------------- +INSERT INTO `sys_oper_log` VALUES (1, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:33:43', 0); +INSERT INTO `sys_oper_log` VALUES (2, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:33:43', 0); +INSERT INTO `sys_oper_log` VALUES (3, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:33:43', 0); +INSERT INTO `sys_oper_log` VALUES (4, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:34:04', 0); +INSERT INTO `sys_oper_log` VALUES (5, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:34:04', 0); +INSERT INTO `sys_oper_log` VALUES (6, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:34:04', 0); +INSERT INTO `sys_oper_log` VALUES (7, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:34:04', 0); +INSERT INTO `sys_oper_log` VALUES (8, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:34:06', 0); +INSERT INTO `sys_oper_log` VALUES (9, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:34:06', 0); +INSERT INTO `sys_oper_log` VALUES (10, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:34:22', 0); +INSERT INTO `sys_oper_log` VALUES (11, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:34:22', 0); +INSERT INTO `sys_oper_log` VALUES (12, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:34:50', 0); +INSERT INTO `sys_oper_log` VALUES (13, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:34:50', 0); +INSERT INTO `sys_oper_log` VALUES (14, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:34:50', 0); +INSERT INTO `sys_oper_log` VALUES (15, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:35:23', 0); +INSERT INTO `sys_oper_log` VALUES (16, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:35:23', 0); +INSERT INTO `sys_oper_log` VALUES (17, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:36:30', 0); +INSERT INTO `sys_oper_log` VALUES (18, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:36:30', 0); +INSERT INTO `sys_oper_log` VALUES (19, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:37:21', 0); +INSERT INTO `sys_oper_log` VALUES (20, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:37:21', 0); +INSERT INTO `sys_oper_log` VALUES (21, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:37:21', 0); +INSERT INTO `sys_oper_log` VALUES (22, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:37:21', 0); +INSERT INTO `sys_oper_log` VALUES (23, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:37:21', 0); +INSERT INTO `sys_oper_log` VALUES (24, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:37:28', 0); +INSERT INTO `sys_oper_log` VALUES (25, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:37:28', 0); +INSERT INTO `sys_oper_log` VALUES (26, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:37:36', 0); +INSERT INTO `sys_oper_log` VALUES (27, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:37:36', 0); +INSERT INTO `sys_oper_log` VALUES (28, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:37:36', 0); +INSERT INTO `sys_oper_log` VALUES (29, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:38:07', 0); +INSERT INTO `sys_oper_log` VALUES (30, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:38:07', 0); +INSERT INTO `sys_oper_log` VALUES (31, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:38:07', 0); +INSERT INTO `sys_oper_log` VALUES (32, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/demo/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:52:58', 0); +INSERT INTO `sys_oper_log` VALUES (33, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/demo/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:52:58', 0); +INSERT INTO `sys_oper_log` VALUES (34, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/demo/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 10:52:58', 0); +INSERT INTO `sys_oper_log` VALUES (35, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:13:22', 0); +INSERT INTO `sys_oper_log` VALUES (36, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:13:22', 0); +INSERT INTO `sys_oper_log` VALUES (37, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:13:46', 0); +INSERT INTO `sys_oper_log` VALUES (38, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:13:46', 0); +INSERT INTO `sys_oper_log` VALUES (39, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:16:05', 0); +INSERT INTO `sys_oper_log` VALUES (40, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:16:05', 0); +INSERT INTO `sys_oper_log` VALUES (41, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:16:05', 0); +INSERT INTO `sys_oper_log` VALUES (42, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:16:05', 0); +INSERT INTO `sys_oper_log` VALUES (43, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:16:05', 0); +INSERT INTO `sys_oper_log` VALUES (44, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:34:22', 0); +INSERT INTO `sys_oper_log` VALUES (45, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:34:22', 0); +INSERT INTO `sys_oper_log` VALUES (46, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:34:22', 0); +INSERT INTO `sys_oper_log` VALUES (47, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:35:53', 0); +INSERT INTO `sys_oper_log` VALUES (48, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:35:53', 0); +INSERT INTO `sys_oper_log` VALUES (49, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:35:53', 0); +INSERT INTO `sys_oper_log` VALUES (50, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:36:45', 0); +INSERT INTO `sys_oper_log` VALUES (51, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:36:46', 0); +INSERT INTO `sys_oper_log` VALUES (52, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:36:46', 0); +INSERT INTO `sys_oper_log` VALUES (53, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:42:23', 0); +INSERT INTO `sys_oper_log` VALUES (54, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:42:23', 0); +INSERT INTO `sys_oper_log` VALUES (55, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:42:23', 0); +INSERT INTO `sys_oper_log` VALUES (56, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:42:23', 0); +INSERT INTO `sys_oper_log` VALUES (57, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:42:23', 0); +INSERT INTO `sys_oper_log` VALUES (58, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:43:03', 0); +INSERT INTO `sys_oper_log` VALUES (59, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:43:03', 0); +INSERT INTO `sys_oper_log` VALUES (60, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 11:43:03', 0); +INSERT INTO `sys_oper_log` VALUES (61, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '120.237.13.90', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:10:07', 0); +INSERT INTO `sys_oper_log` VALUES (62, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '120.237.13.90', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:10:07', 0); +INSERT INTO `sys_oper_log` VALUES (63, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '120.237.13.90', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:10:07', 0); +INSERT INTO `sys_oper_log` VALUES (64, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:11:53', 0); +INSERT INTO `sys_oper_log` VALUES (65, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:11:53', 0); +INSERT INTO `sys_oper_log` VALUES (66, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:11:53', 0); +INSERT INTO `sys_oper_log` VALUES (67, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:11:53', 0); +INSERT INTO `sys_oper_log` VALUES (68, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:11:56', 0); +INSERT INTO `sys_oper_log` VALUES (69, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:11:56', 0); +INSERT INTO `sys_oper_log` VALUES (70, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '120.237.13.90', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:12:07', 0); +INSERT INTO `sys_oper_log` VALUES (71, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '120.237.13.90', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:12:07', 0); +INSERT INTO `sys_oper_log` VALUES (72, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '120.237.13.90', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:12:07', 0); +INSERT INTO `sys_oper_log` VALUES (73, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:17:58', 0); +INSERT INTO `sys_oper_log` VALUES (74, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:17:58', 0); +INSERT INTO `sys_oper_log` VALUES (75, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:17:58', 0); +INSERT INTO `sys_oper_log` VALUES (76, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:21:27', 0); +INSERT INTO `sys_oper_log` VALUES (77, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:21:27', 0); +INSERT INTO `sys_oper_log` VALUES (78, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:21:27', 0); +INSERT INTO `sys_oper_log` VALUES (79, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:21:44', 0); +INSERT INTO `sys_oper_log` VALUES (80, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:21:45', 0); +INSERT INTO `sys_oper_log` VALUES (81, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:21:44', 0); +INSERT INTO `sys_oper_log` VALUES (82, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:22:48', 0); +INSERT INTO `sys_oper_log` VALUES (83, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:22:48', 0); +INSERT INTO `sys_oper_log` VALUES (84, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:22:48', 0); +INSERT INTO `sys_oper_log` VALUES (85, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:22:48', 0); +INSERT INTO `sys_oper_log` VALUES (86, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:22:48', 0); +INSERT INTO `sys_oper_log` VALUES (87, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:22:57', 0); +INSERT INTO `sys_oper_log` VALUES (88, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.182', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/auth/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-28 14:22:57', 0); +INSERT INTO `sys_oper_log` VALUES (89, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/login', '219.130.185.182', '广东省 佛山市', '{\"username\":\"admim\",\"password\":\"123456\",\"code\":\"1\",\"uuid\":\"24bc9779b3eb48c9bb9e7e852eec67db\"}', '{\n \"code\": 105,\n \"msg\": \"用户名或密码错误\",\n \"data\": null\n}', 1, '用户名或密码错误', '2022-07-28 14:54:16', 0); +INSERT INTO `sys_oper_log` VALUES (90, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '219.130.185.243', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/www/wwwroot/glh_webAdmin/api/bin/Debug/net6.0/glh_web.Model.dll\'. The system cannot find the file specified.\n', '2022-07-29 17:05:44', 0); +INSERT INTO `sys_oper_log` VALUES (91, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/business/News/getNewsList', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Table \'glh_web.tb_news\' doesn\'t exist', '2022-08-01 11:52:19', 0); +INSERT INTO `sys_oper_log` VALUES (92, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '219.130.184.161', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/www/wwwroot/ARW/api/bin/Debug/net6.0/ARW.Model.dll\'. The system cannot find the file specified.\n', '2022-08-02 14:16:01', 0); +INSERT INTO `sys_oper_log` VALUES (93, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '219.130.184.161', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/www/wwwroot/ARW/api/bin/Debug/net6.0/ARW.Model.dll\'. The system cannot find the file specified.\n', '2022-08-02 14:16:01', 0); +INSERT INTO `sys_oper_log` VALUES (94, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/login', '219.130.184.161', '广东省 佛山市', '{\"username\":\"admin\",\"password\":\"123456789a\",\"code\":\"1\",\"uuid\":\"44e0944970dc45dab1f446837aa7b7e5\"}', '{\n \"code\": 105,\n \"msg\": \"用户名或密码错误\",\n \"data\": null\n}', 1, '用户名或密码错误', '2022-08-02 22:45:21', 0); +INSERT INTO `sys_oper_log` VALUES (95, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Duplicate entry \'0\' for key \'crawl.PRIMARY\'', '2022-08-15 20:51:57', 0); +INSERT INTO `sys_oper_log` VALUES (96, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 0,\r\n \"msg\": \"爬虫失败\",\r\n \"data\": null\r\n}', 1, '爬虫失败', '2022-08-15 21:48:17', 0); +INSERT INTO `sys_oper_log` VALUES (97, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Cannot return null from an action method with a return type of \'Microsoft.AspNetCore.Mvc.IActionResult\'.', '2022-08-15 22:11:38', 0); +INSERT INTO `sys_oper_log` VALUES (98, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Cannot return null from an action method with a return type of \'Microsoft.AspNetCore.Mvc.IActionResult\'.', '2022-08-15 22:11:52', 0); +INSERT INTO `sys_oper_log` VALUES (99, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Cannot return null from an action method with a return type of \'Microsoft.AspNetCore.Mvc.IActionResult\'.', '2022-08-15 22:11:56', 0); +INSERT INTO `sys_oper_log` VALUES (100, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Cannot return null from an action method with a return type of \'Microsoft.AspNetCore.Mvc.IActionResult\'.', '2022-08-15 22:45:52', 0); +INSERT INTO `sys_oper_log` VALUES (101, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 0,\r\n \"msg\": \"爬虫失败\",\r\n \"data\": null\r\n}', 1, '爬虫失败', '2022-08-16 08:57:24', 0); +INSERT INTO `sys_oper_log` VALUES (102, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 0,\r\n \"msg\": \"爬虫失败\",\r\n \"data\": null\r\n}', 1, '爬虫失败', '2022-08-16 15:20:11', 0); +INSERT INTO `sys_oper_log` VALUES (103, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/system/CommonLang/list/zh-cn', '113.69.251.227', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/www/ARW/api/bin/Debug/net6.0/ARW.Model.dll\'. The system cannot find the file specified.\n', '2022-08-17 11:47:19', 0); +INSERT INTO `sys_oper_log` VALUES (104, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/getInfo', '113.69.251.227', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/www/ARW/api/bin/Debug/net6.0/ARW.Model.dll\'. The system cannot find the file specified.\n', '2022-08-17 11:47:19', 0); +INSERT INTO `sys_oper_log` VALUES (105, '注销', 0, NULL, 'POST', 0, 'admin', NULL, '/LogOut', '113.69.251.227', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Could not load file or assembly \'/home/www/ARW/api/bin/Debug/net6.0/ARW.Model.dll\'. The system cannot find the file specified.\n', '2022-08-17 11:47:19', 0); +INSERT INTO `sys_oper_log` VALUES (106, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler/getCrawlList', '113.69.251.227', '广东省 佛山市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Unknown column \'DownResources\' in \'field list\'', '2022-08-17 11:55:57', 0); +INSERT INTO `sys_oper_log` VALUES (107, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler/getCrawlList', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'DownResources\' in \'field list\'', '2022-08-17 12:31:39', 0); +INSERT INTO `sys_oper_log` VALUES (108, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler/getCrawlList', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'DownResources\' in \'field list\'', '2022-08-17 12:32:41', 0); +INSERT INTO `sys_oper_log` VALUES (109, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler/getCrawlList', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unable to cast object of type \'Infrastructure.Model.ApiResult\' to type \'Microsoft.AspNetCore.Mvc.IActionResult\'.', '2022-08-17 14:13:17', 0); +INSERT INTO `sys_oper_log` VALUES (110, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler/getCrawlList', '113.69.251.227', '广东省 佛山市', '?pageNum=1&pageSize=10', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Method not found: \'ARW.Model.PagedInfo`1 ARW.Service.Business.IBusinessService.Crawler.ICrawlService.GetBuxiuseList(ARW.Model.Dto.Business.Crawler.CrawlQueryDto)\'.', '2022-08-17 14:42:41', 0); +INSERT INTO `sys_oper_log` VALUES (111, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler/getCrawlList', '113.69.251.227', '广东省 佛山市', '?pageNum=1&pageSize=10', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Method not found: \'ARW.Model.PagedInfo`1 ARW.Service.Business.IBusinessService.Crawler.ICrawlService.GetBuxiuseList(ARW.Model.Dto.Business.Crawler.CrawlQueryDto)\'.', '2022-08-17 14:43:55', 0); +INSERT INTO `sys_oper_log` VALUES (112, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler/ParseCrawler', '120.197.197.48', '广东省 东莞市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Cannot return null from an action method with a return type of \'Microsoft.AspNetCore.Mvc.IActionResult\'.', '2022-08-22 23:03:47', 0); +INSERT INTO `sys_oper_log` VALUES (113, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler/ParseCrawler', '120.197.197.48', '广东省 东莞市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Cannot return null from an action method with a return type of \'Microsoft.AspNetCore.Mvc.IActionResult\'.', '2022-08-22 23:04:11', 0); +INSERT INTO `sys_oper_log` VALUES (114, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler/ParseCrawler', '120.197.197.48', '广东省 东莞市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Cannot return null from an action method with a return type of \'Microsoft.AspNetCore.Mvc.IActionResult\'.', '2022-08-22 23:04:21', 0); +INSERT INTO `sys_oper_log` VALUES (115, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler/ParseCrawler', '120.197.197.48', '广东省 东莞市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Cannot return null from an action method with a return type of \'Microsoft.AspNetCore.Mvc.IActionResult\'.', '2022-08-22 23:06:34', 0); +INSERT INTO `sys_oper_log` VALUES (116, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/Crawler/ParseCrawler', '120.197.197.48', '广东省 东莞市', '', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Cannot return null from an action method with a return type of \'Microsoft.AspNetCore.Mvc.IActionResult\'.', '2022-08-22 23:06:40', 0); +INSERT INTO `sys_oper_log` VALUES (117, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/ChatLogin/register', '127.0.0.1', '0 内网IP', '{\n \"chatUserNickName\": \"Alvin\",\n \"chatUserName\": \"Aerwen\",\n \"password\": \"123456\"\n}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-08-24 15:48:19', 0); +INSERT INTO `sys_oper_log` VALUES (118, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/ChatLogin/register', '127.0.0.1', '0 内网IP', '{\n \"chatUserGuid\": 0,\n \"chatUserNickName\": \"小妮妮\",\n \"chatUserName\": \"Aerwen\",\n \"password\": \"123456\"\n}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-08-24 16:13:05', 0); +INSERT INTO `sys_oper_log` VALUES (119, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLogin/login', '127.0.0.1', '0 内网IP', '{\n \"chatUserGuid\": 0,\n \"chatUserNickName\": \"Aerwen\",\n \"chatUserName\": \"string\",\n \"password\": \"123456\"\n}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-08-24 16:16:25', 0); +INSERT INTO `sys_oper_log` VALUES (120, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLogin/login', '127.0.0.1', '0 内网IP', '{\n \"chatUserGuid\": 0,\n \"chatUserNickName\": \"\",\n \"chatUserName\": \"e\",\n \"password\": \"123456\"\n}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-08-24 16:16:42', 0); +INSERT INTO `sys_oper_log` VALUES (121, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"username\":\"asd\",\"password\":\"1\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-08-24 17:02:04', 0); +INSERT INTO `sys_oper_log` VALUES (122, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"username\":\"Aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-08-24 17:02:19', 0); +INSERT INTO `sys_oper_log` VALUES (123, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"username\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-08-24 17:02:28', 0); +INSERT INTO `sys_oper_log` VALUES (124, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"username\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-08-24 17:05:00', 0); +INSERT INTO `sys_oper_log` VALUES (125, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"a\",\"password\":\"1\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-08-24 17:22:03', 0); +INSERT INTO `sys_oper_log` VALUES (126, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatnickname\":\"aa\",\"chatusername\":\"aerwen\",\"password\":\"123\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-08-24 19:19:25', 0); +INSERT INTO `sys_oper_log` VALUES (127, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatnickname\":\"约翰\",\"chatusername\":\"join\",\"password\":\"join\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Field \'chat_user_nickname\' doesn\'t have a default value', '2022-08-24 19:19:53', 0); +INSERT INTO `sys_oper_log` VALUES (128, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatnickname\":\"约翰\",\"chatusername\":\"join\",\"password\":\"join\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Field \'chat_user_nickname\' doesn\'t have a default value', '2022-08-24 19:20:22', 0); +INSERT INTO `sys_oper_log` VALUES (129, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatnickname\":\"jj\",\"chatusername\":\"jj\",\"password\":\"jj\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-08-24 20:10:57', 0); +INSERT INTO `sys_oper_log` VALUES (130, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatnickname\":\"\",\"chatusername\":\"arewen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-08-25 10:09:08', 0); +INSERT INTO `sys_oper_log` VALUES (131, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatnickname\":\"\",\"chatusername\":\"arewen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-08-25 10:09:11', 0); +INSERT INTO `sys_oper_log` VALUES (132, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatnickname\":\"\",\"chatusername\":\"arewen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-08-25 10:09:18', 0); +INSERT INTO `sys_oper_log` VALUES (133, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:19:54', 0); +INSERT INTO `sys_oper_log` VALUES (134, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:19:56', 0); +INSERT INTO `sys_oper_log` VALUES (135, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:20:16', 0); +INSERT INTO `sys_oper_log` VALUES (136, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:20:17', 0); +INSERT INTO `sys_oper_log` VALUES (137, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:20:25', 0); +INSERT INTO `sys_oper_log` VALUES (138, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:20:26', 0); +INSERT INTO `sys_oper_log` VALUES (139, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:20:39', 0); +INSERT INTO `sys_oper_log` VALUES (140, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:20:41', 0); +INSERT INTO `sys_oper_log` VALUES (141, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:20:43', 0); +INSERT INTO `sys_oper_log` VALUES (142, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:20:44', 0); +INSERT INTO `sys_oper_log` VALUES (143, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:20:46', 0); +INSERT INTO `sys_oper_log` VALUES (144, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:21:08', 0); +INSERT INTO `sys_oper_log` VALUES (145, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:21:09', 0); +INSERT INTO `sys_oper_log` VALUES (146, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:22:55', 0); +INSERT INTO `sys_oper_log` VALUES (147, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:27:36', 0); +INSERT INTO `sys_oper_log` VALUES (148, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:27:35', 0); +INSERT INTO `sys_oper_log` VALUES (149, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:29:07', 0); +INSERT INTO `sys_oper_log` VALUES (150, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:29:37', 0); +INSERT INTO `sys_oper_log` VALUES (151, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:29:39', 0); +INSERT INTO `sys_oper_log` VALUES (152, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-25 11:29:57', 0); +INSERT INTO `sys_oper_log` VALUES (153, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatnickname\":\"\",\"chatusername\":\"\",\"password\":\"\"}', '{\r\n \"code\": 101,\r\n \"msg\": \"\\\"srcstring\\\" can\'t be empty. (parameter \'srcstring\')\",\r\n \"data\": null\r\n}', 1, '\"srcString\" can\'t be empty. (Parameter \'srcString\')', '2022-08-25 15:10:55', 0); +INSERT INTO `sys_oper_log` VALUES (154, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatnickname\":\"\",\"chatusername\":\"\",\"password\":\"\"}', '{\r\n \"code\": 101,\r\n \"msg\": \"\\\"srcstring\\\" can\'t be empty. (parameter \'srcstring\')\",\r\n \"data\": null\r\n}', 1, '\"srcString\" can\'t be empty. (Parameter \'srcString\')', '2022-08-25 15:10:56', 0); +INSERT INTO `sys_oper_log` VALUES (155, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatnickname\":\"\",\"chatusername\":\"\",\"password\":\"\"}', '{\r\n \"code\": 101,\r\n \"msg\": \"\\\"srcstring\\\" can\'t be empty. (parameter \'srcstring\')\",\r\n \"data\": null\r\n}', 1, '\"srcString\" can\'t be empty. (Parameter \'srcString\')', '2022-08-25 15:10:57', 0); +INSERT INTO `sys_oper_log` VALUES (156, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatnickname\":\"\",\"chatusername\":\"\",\"password\":\"\"}', '{\r\n \"code\": 101,\r\n \"msg\": \"\\\"srcstring\\\" can\'t be empty. (parameter \'srcstring\')\",\r\n \"data\": null\r\n}', 1, '\"srcString\" can\'t be empty. (Parameter \'srcString\')', '2022-08-25 15:11:11', 0); +INSERT INTO `sys_oper_log` VALUES (157, '聊天用户修改', 2, NULL, 'PUT', 0, NULL, NULL, '/business/chatLogin/updateChatUser', '127.0.0.1', '0 内网IP', '{\"chatUserId\":1,\"chatUserGuId\":\"1562352426743369728\",\"chatUserName\":\"Aerwen\",\"chatUserNickName\":\"小妮妮\",\"sex\":\"1\",\"age\":18,\"chatUserImg\":\"http://aerwen.net/static/png/logo-37525e55.png\",\"phone\":null,\"email\":null,\"status\":0,\"createBy\":null,\"createTime\":\"2022-08-24 16:13:40\",\"updateTime\":null,\"isDelete\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-08-25 21:10:06', 0); +INSERT INTO `sys_oper_log` VALUES (158, '聊天用户修改', 2, NULL, 'PUT', 0, NULL, NULL, '/business/chatLogin/updateChatUser', '127.0.0.1', '0 内网IP', '{\"chatUserId\":1,\"chatUserGuId\":\"1562352426743369728\",\"chatUserName\":\"Aerwen\",\"chatUserNickName\":\"小妮妮\",\"sex\":\"1\",\"age\":18,\"chatUserImg\":\"http://aerwen.net/static/png/logo-37525e55.png\",\"phone\":null,\"email\":null,\"status\":0,\"createBy\":null,\"createTime\":\"2022-08-24 16:13:40\",\"updateTime\":null,\"isDelete\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-08-25 21:10:16', 0); +INSERT INTO `sys_oper_log` VALUES (159, '聊天用户修改', 2, NULL, 'PUT', 0, NULL, NULL, '/business/chatLogin/updateChatUser', '127.0.0.1', '0 内网IP', '{\"chatUserId\":1,\"chatUserGuId\":\"1562352426743369728\",\"chatUserName\":\"Aerwen\",\"chatUserNickName\":\"小妮妮\",\"sex\":\"1\",\"age\":18,\"chatUserImg\":\"http://aerwen.net/static/png/logo-37525e55.png\",\"phone\":null,\"email\":null,\"status\":0,\"createBy\":null,\"createTime\":\"2022-08-24 16:13:40\",\"updateTime\":null,\"isDelete\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-08-25 21:11:08', 0); +INSERT INTO `sys_oper_log` VALUES (160, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-30 19:04:49', 0); +INSERT INTO `sys_oper_log` VALUES (161, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-30 19:07:23', 0); +INSERT INTO `sys_oper_log` VALUES (162, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{}', '{\r\n \"code\": 0,\r\n \"msg\": \"请求参数错误\",\r\n \"data\": null\r\n}', 1, '请求参数错误', '2022-08-30 19:09:40', 0); +INSERT INTO `sys_oper_log` VALUES (163, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"zhanggangan\\\\\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-08-30 19:10:27', 0); +INSERT INTO `sys_oper_log` VALUES (164, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-08-30 19:32:04', 0); +INSERT INTO `sys_oper_log` VALUES (165, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-08-30 19:32:05', 0); +INSERT INTO `sys_oper_log` VALUES (166, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-08-30 21:58:51', 0); +INSERT INTO `sys_oper_log` VALUES (167, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"jj\'\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-08-30 23:29:08', 0); +INSERT INTO `sys_oper_log` VALUES (168, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"ajj\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-08-30 23:34:26', 0); +INSERT INTO `sys_oper_log` VALUES (169, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"aerwen\\\\\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-08-30 23:54:12', 0); +INSERT INTO `sys_oper_log` VALUES (170, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"Aerwen\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-09-01 15:05:22', 0); +INSERT INTO `sys_oper_log` VALUES (171, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"Aerwen\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-09-01 15:05:23', 0); +INSERT INTO `sys_oper_log` VALUES (172, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"Aerwen\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-09-01 15:05:25', 0); +INSERT INTO `sys_oper_log` VALUES (173, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565505758001500160', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-02 09:48:27', 0); +INSERT INTO `sys_oper_log` VALUES (174, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-02 10:53:29', 0); +INSERT INTO `sys_oper_log` VALUES (175, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565505758001500160', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Authentication to host \'47.242.159.172\' for user \'chat\' using method \'mysql_native_password\' failed with message: Got timeout reading communication packets.\r\nEnglish Message : Connection open error . Authentication to host \'47.242.159.172\' for user \'chat\' using method \'mysql_native_password\' failed with message: Got timeout reading communication packets', '2022-09-02 11:08:23', 0); +INSERT INTO `sys_oper_log` VALUES (176, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\" gaomu\",\"password\":\"gaomu\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-02 16:35:13', 0); +INSERT INTO `sys_oper_log` VALUES (177, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\" gaomu\",\"password\":\"gaomu\'\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-02 16:35:18', 0); +INSERT INTO `sys_oper_log` VALUES (178, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\" gaomu\",\"password\":\"gaomu\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-02 16:35:19', 0); +INSERT INTO `sys_oper_log` VALUES (179, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\" gaomu\",\"password\":\"gaomu\'\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-02 16:35:21', 0); +INSERT INTO `sys_oper_log` VALUES (180, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\" gaomu\",\"password\":\"gaomu\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-02 16:35:23', 0); +INSERT INTO `sys_oper_log` VALUES (181, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\" gaomu\",\"password\":\" gaomu\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-02 16:35:25', 0); +INSERT INTO `sys_oper_log` VALUES (182, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\" gaomu\",\"password\":\" gaomu\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-02 16:35:32', 0); +INSERT INTO `sys_oper_log` VALUES (183, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\" gaomu\",\"password\":\" gaomu\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-02 16:41:10', 0); +INSERT INTO `sys_oper_log` VALUES (184, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"gaomu\",\"password\":\" gaomu\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-02 16:41:16', 0); +INSERT INTO `sys_oper_log` VALUES (185, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"aerweb\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户不存在\",\r\n \"data\": null\r\n}', 1, '用户不存在', '2022-09-02 17:00:25', 0); +INSERT INTO `sys_oper_log` VALUES (186, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-02 23:24:24', 0); +INSERT INTO `sys_oper_log` VALUES (187, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-02 23:24:31', 0); +INSERT INTO `sys_oper_log` VALUES (188, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"aerwe\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-04 17:03:31', 0); +INSERT INTO `sys_oper_log` VALUES (189, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"高木\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-04 17:20:01', 0); +INSERT INTO `sys_oper_log` VALUES (190, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1565539656794247168\",\"Postscript\":\"1\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"你们已是好友,请勿重复添加!\",\r\n \"data\": null\r\n}', 1, '你们已是好友,请勿重复添加!', '2022-09-04 17:22:58', 0); +INSERT INTO `sys_oper_log` VALUES (191, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1565234713298341888\",\"Postscript\":\"1\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"你们已是好友,请勿重复添加!\",\r\n \"data\": null\r\n}', 1, '你们已是好友,请勿重复添加!', '2022-09-04 17:23:08', 0); +INSERT INTO `sys_oper_log` VALUES (192, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1565539656794247168\",\"Postscript\":\"as\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"你们已是好友,请勿重复添加!\",\r\n \"data\": null\r\n}', 1, '你们已是好友,请勿重复添加!', '2022-09-04 17:24:28', 0); +INSERT INTO `sys_oper_log` VALUES (193, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1565234713298341888\",\"Postscript\":\"as\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"你们已是好友,请勿重复添加!\",\r\n \"data\": null\r\n}', 1, '你们已是好友,请勿重复添加!', '2022-09-04 17:24:34', 0); +INSERT INTO `sys_oper_log` VALUES (194, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"jj\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-04 17:37:32', 0); +INSERT INTO `sys_oper_log` VALUES (195, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"ll\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-04 17:37:37', 0); +INSERT INTO `sys_oper_log` VALUES (196, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1565539656794247168\",\"Postscript\":\"asd\",\"IsGroup\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"你们已是好友,请勿重复添加!\",\r\n \"data\": null\r\n}', 1, '你们已是好友,请勿重复添加!', '2022-09-04 17:50:16', 0); +INSERT INTO `sys_oper_log` VALUES (197, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"nmsl\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-05 08:11:33', 0); +INSERT INTO `sys_oper_log` VALUES (198, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"nmsl\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-05 08:11:43', 0); +INSERT INTO `sys_oper_log` VALUES (199, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"Nmsl\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-05 08:11:50', 0); +INSERT INTO `sys_oper_log` VALUES (200, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"NMSL\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-05 08:11:54', 0); +INSERT INTO `sys_oper_log` VALUES (201, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"nmsl\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-05 08:12:10', 0); +INSERT INTO `sys_oper_log` VALUES (202, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"nmsl\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-05 08:12:19', 0); +INSERT INTO `sys_oper_log` VALUES (203, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"nmsl\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-05 08:12:42', 0); +INSERT INTO `sys_oper_log` VALUES (204, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"李文豪\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-05 08:12:56', 0); +INSERT INTO `sys_oper_log` VALUES (205, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"李文\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-05 08:12:59', 0); +INSERT INTO `sys_oper_log` VALUES (206, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1566578968788865024\",\"Postscript\":\"asd\",\"IsGroup\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"你们已是好友,请勿重复添加!\",\r\n \"data\": null\r\n}', 1, '你们已是好友,请勿重复添加!', '2022-09-05 08:15:27', 0); +INSERT INTO `sys_oper_log` VALUES (207, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"132456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-05 11:24:55', 0); +INSERT INTO `sys_oper_log` VALUES (208, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1566628186152898560\",\"Postscript\":\"wos\",\"IsGroup\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"已发送申请,请勿重复发送!\",\r\n \"data\": null\r\n}', 1, '已发送申请,请勿重复发送!', '2022-09-05 11:25:48', 0); +INSERT INTO `sys_oper_log` VALUES (209, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234713298341888\",\"ReceiverGuId\":\"1565234480619327488\",\"Postscript\":\"asd\",\"IsGroup\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"你们已是好友,请勿重复添加!\",\r\n \"data\": null\r\n}', 1, '你们已是好友,请勿重复添加!', '2022-09-05 21:20:09', 0); +INSERT INTO `sys_oper_log` VALUES (210, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-06 09:43:33', 0); +INSERT INTO `sys_oper_log` VALUES (211, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-06 09:43:42', 0); +INSERT INTO `sys_oper_log` VALUES (212, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-06 09:43:46', 0); +INSERT INTO `sys_oper_log` VALUES (213, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-06 09:44:49', 0); +INSERT INTO `sys_oper_log` VALUES (214, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/captchaImage', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-06 10:57:22', 0); +INSERT INTO `sys_oper_log` VALUES (215, NULL, 0, NULL, 'GET', 0, 'zr', NULL, '/getInfo', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-06 11:10:43', 0); +INSERT INTO `sys_oper_log` VALUES (216, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1567314284931846144', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-07 08:50:38', 0); +INSERT INTO `sys_oper_log` VALUES (217, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123345\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-07 08:51:43', 0); +INSERT INTO `sys_oper_log` VALUES (218, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-07 08:52:06', 0); +INSERT INTO `sys_oper_log` VALUES (219, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-07 08:52:20', 0); +INSERT INTO `sys_oper_log` VALUES (220, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-07 08:52:39', 0); +INSERT INTO `sys_oper_log` VALUES (221, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"1234556\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-07 09:01:54', 0); +INSERT INTO `sys_oper_log` VALUES (222, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"kk\",\"password\":\"kk\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 10:13:43', 0); +INSERT INTO `sys_oper_log` VALUES (223, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"kk\",\"password\":\"kk\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 10:14:16', 0); +INSERT INTO `sys_oper_log` VALUES (224, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234713298341888', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-07 10:14:22', 0); +INSERT INTO `sys_oper_log` VALUES (225, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"kk\",\"password\":\"kk\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 10:17:25', 0); +INSERT INTO `sys_oper_log` VALUES (226, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"kk\",\"password\":\"kk\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 10:18:30', 0); +INSERT INTO `sys_oper_log` VALUES (227, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 10:21:12', 0); +INSERT INTO `sys_oper_log` VALUES (228, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234713298341888\",\"ReceiverGuId\":\"1565234480619327488\",\"Postscript\":\"我是kk\",\"IsGroup\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"已发送申请,请勿重复发送!\",\r\n \"data\": null\r\n}', 1, '已发送申请,请勿重复发送!', '2022-09-07 10:56:52', 0); +INSERT INTO `sys_oper_log` VALUES (229, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234713298341888\",\"ReceiverGuId\":\"1565234480619327488\",\"Postscript\":\"我是kk\",\"IsGroup\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"已发送申请,请勿重复发送!\",\r\n \"data\": null\r\n}', 1, '已发送申请,请勿重复发送!', '2022-09-07 10:58:03', 0); +INSERT INTO `sys_oper_log` VALUES (230, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\" gaomu\",\"password\":\"gaomu\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-07 11:12:18', 0); +INSERT INTO `sys_oper_log` VALUES (231, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\" gaomu\",\"password\":\"gaomu\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-07 11:12:29', 0); +INSERT INTO `sys_oper_log` VALUES (232, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1567350099854626816', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-07 11:13:57', 0); +INSERT INTO `sys_oper_log` VALUES (233, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 11:49:25', 0); +INSERT INTO `sys_oper_log` VALUES (234, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"kk\",\"password\":\"kk\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 11:50:50', 0); +INSERT INTO `sys_oper_log` VALUES (235, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"kk\",\"password\":\"kk\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 11:54:29', 0); +INSERT INTO `sys_oper_log` VALUES (236, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1566628186152898560', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-07 12:02:24', 0); +INSERT INTO `sys_oper_log` VALUES (237, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 12:58:15', 0); +INSERT INTO `sys_oper_log` VALUES (238, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-07 12:59:06', 0); +INSERT INTO `sys_oper_log` VALUES (239, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"ll\",\"password\":\"ll\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 13:00:43', 0); +INSERT INTO `sys_oper_log` VALUES (240, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 23:27:12', 0); +INSERT INTO `sys_oper_log` VALUES (241, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 23:27:13', 0); +INSERT INTO `sys_oper_log` VALUES (242, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-07 23:29:13', 0); +INSERT INTO `sys_oper_log` VALUES (243, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-08 09:45:44', 0); +INSERT INTO `sys_oper_log` VALUES (244, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-08 09:45:53', 0); +INSERT INTO `sys_oper_log` VALUES (245, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"nmsl\",\"password\":\"nmsl\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-08 09:46:05', 0); +INSERT INTO `sys_oper_log` VALUES (246, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"//\'nmsl\",\"password\":\"nmsl\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-08 09:46:15', 0); +INSERT INTO `sys_oper_log` VALUES (247, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"//\'nmsl\",\"password\":\"\'\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-08 09:46:20', 0); +INSERT INTO `sys_oper_log` VALUES (248, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"//\\\"nmsl\",\"password\":\"\'\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-08 09:46:28', 0); +INSERT INTO `sys_oper_log` VALUES (249, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-08 11:42:06', 0); +INSERT INTO `sys_oper_log` VALUES (250, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-08 11:42:21', 0); +INSERT INTO `sys_oper_log` VALUES (251, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-08 11:43:01', 0); +INSERT INTO `sys_oper_log` VALUES (252, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-08 14:52:14', 0); +INSERT INTO `sys_oper_log` VALUES (253, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-08 14:58:16', 0); +INSERT INTO `sys_oper_log` VALUES (254, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-08 15:00:58', 0); +INSERT INTO `sys_oper_log` VALUES (255, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-08 15:08:31', 0); +INSERT INTO `sys_oper_log` VALUES (256, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-08 22:08:10', 0); +INSERT INTO `sys_oper_log` VALUES (257, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatFriendLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"ChatLogType\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":\"1565505758001500160\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Reading from the stream has failed..\r\nEnglish Message : Connection open error . Reading from the stream has failed.', '2022-09-08 23:19:33', 0); +INSERT INTO `sys_oper_log` VALUES (258, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-08 23:20:33', 0); +INSERT INTO `sys_oper_log` VALUES (259, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-08 23:20:33', 0); +INSERT INTO `sys_oper_log` VALUES (260, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"zhangangan\",\"password\":\"zhangangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-08 23:27:21', 0); +INSERT INTO `sys_oper_log` VALUES (261, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-12 00:01:46', 0); +INSERT INTO `sys_oper_log` VALUES (262, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-12 00:03:18', 0); +INSERT INTO `sys_oper_log` VALUES (263, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'s.ChatLogSendTime\' in \'order clause\'', '2022-09-12 00:03:57', 0); +INSERT INTO `sys_oper_log` VALUES (264, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'s.ChatLogSendTime\' in \'order clause\'', '2022-09-12 00:04:07', 0); +INSERT INTO `sys_oper_log` VALUES (265, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'s.ChatLogSendTime\' in \'order clause\'', '2022-09-12 00:06:04', 0); +INSERT INTO `sys_oper_log` VALUES (266, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'s.ChatLogSendTime\' in \'order clause\'', '2022-09-12 00:07:17', 0); +INSERT INTO `sys_oper_log` VALUES (267, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'s.ChatLogSendTime\' in \'order clause\'', '2022-09-12 00:08:33', 0); +INSERT INTO `sys_oper_log` VALUES (268, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'s.ChatLogSendTime\' in \'order clause\'', '2022-09-12 00:19:29', 0); +INSERT INTO `sys_oper_log` VALUES (269, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'s.ChatLogSendTime\' in \'order clause\'', '2022-09-12 00:20:39', 0); +INSERT INTO `sys_oper_log` VALUES (270, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565505758001500160', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Timeout in IO operation.\r\nEnglish Message : Connection open error . Timeout in IO operation', '2022-09-12 00:36:58', 0); +INSERT INTO `sys_oper_log` VALUES (271, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565505758001500160\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'s.SenderGuId\' in \'field list\'', '2022-09-12 00:36:58', 0); +INSERT INTO `sys_oper_log` VALUES (272, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565505758001500160\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'s.SenderGuId\' in \'field list\'', '2022-09-12 00:39:57', 0); +INSERT INTO `sys_oper_log` VALUES (273, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 使用 MergeTable不能有 Take Skip OrderBy PageToList 等操作,你可以在Mergetable之后操作\r\nEnglish Message : MergeTable Queryable cannot Take Skip OrderBy PageToList ', '2022-09-12 22:48:37', 0); +INSERT INTO `sys_oper_log` VALUES (274, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 使用 MergeTable不能有 Take Skip OrderBy PageToList 等操作,你可以在Mergetable之后操作\r\nEnglish Message : MergeTable Queryable cannot Take Skip OrderBy PageToList ', '2022-09-12 22:48:46', 0); +INSERT INTO `sys_oper_log` VALUES (275, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 使用 MergeTable不能有 Take Skip OrderBy PageToList 等操作,你可以在Mergetable之后操作\r\nEnglish Message : MergeTable Queryable cannot Take Skip OrderBy PageToList ', '2022-09-12 22:48:53', 0); +INSERT INTO `sys_oper_log` VALUES (276, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 使用 MergeTable不能有 Take Skip OrderBy PageToList 等操作,你可以在Mergetable之后操作\r\nEnglish Message : MergeTable Queryable cannot Take Skip OrderBy PageToList ', '2022-09-12 22:51:12', 0); +INSERT INTO `sys_oper_log` VALUES (277, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 多表查询存在别名不一致,请把GroupBy中的s改成a就可以了,特殊需求可以使用.Select((x,y)=>new{ id=x.id,name=y.name}).MergeTable().Orderby(xxx=>xxx.Id)功能将Select中的多表结果集变成单表,这样就可以不限制别名一样\r\nEnglish Message : Join a needs to be the same as GroupBy s', '2022-09-12 23:07:59', 0); +INSERT INTO `sys_oper_log` VALUES (278, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 多表查询存在别名不一致,请把GroupBy中的s改成a就可以了,特殊需求可以使用.Select((x,y)=>new{ id=x.id,name=y.name}).MergeTable().Orderby(xxx=>xxx.Id)功能将Select中的多表结果集变成单表,这样就可以不限制别名一样\r\nEnglish Message : Join a needs to be the same as GroupBy s', '2022-09-12 23:29:42', 0); +INSERT INTO `sys_oper_log` VALUES (279, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 多表查询存在别名不一致,请把GroupBy中的s改成a就可以了,特殊需求可以使用.Select((x,y)=>new{ id=x.id,name=y.name}).MergeTable().Orderby(xxx=>xxx.Id)功能将Select中的多表结果集变成单表,这样就可以不限制别名一样\r\nEnglish Message : Join a needs to be the same as GroupBy s', '2022-09-12 23:30:10', 0); +INSERT INTO `sys_oper_log` VALUES (280, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 使用 MergeTable不能有 Take Skip OrderBy PageToList 等操作,你可以在Mergetable之后操作\r\nEnglish Message : MergeTable Queryable cannot Take Skip OrderBy PageToList ', '2022-09-12 23:31:02', 0); +INSERT INTO `sys_oper_log` VALUES (281, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'a.ReceiverGuId\' in \'field list\'', '2022-09-12 23:32:07', 0); +INSERT INTO `sys_oper_log` VALUES (282, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 多表查询存在别名不一致,请把OrderBy中的s改成a就可以了,特殊需求可以使用.Select((x,y)=>new{ id=x.id,name=y.name}).MergeTable().Orderby(xxx=>xxx.Id)功能将Select中的多表结果集变成单表,这样就可以不限制别名一样\r\nEnglish Message : Join a needs to be the same as OrderBy s', '2022-09-12 23:33:54', 0); +INSERT INTO `sys_oper_log` VALUES (283, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-14 20:49:59', 0); +INSERT INTO `sys_oper_log` VALUES (284, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 使用 MergeTable不能有 Take Skip OrderBy PageToList 等操作,你可以在Mergetable之后操作\r\nEnglish Message : MergeTable Queryable cannot Take Skip OrderBy PageToList ', '2022-09-15 14:24:06', 0); +INSERT INTO `sys_oper_log` VALUES (285, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 使用 MergeTable不能有 Take Skip OrderBy PageToList 等操作,你可以在Mergetable之后操作\r\nEnglish Message : MergeTable Queryable cannot Take Skip OrderBy PageToList ', '2022-09-15 14:24:29', 0); +INSERT INTO `sys_oper_log` VALUES (286, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 使用 MergeTable不能有 Take Skip OrderBy PageToList 等操作,你可以在Mergetable之后操作\r\nEnglish Message : MergeTable Queryable cannot Take Skip OrderBy PageToList ', '2022-09-15 14:24:38', 0); +INSERT INTO `sys_oper_log` VALUES (287, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 使用 MergeTable不能有 Take Skip OrderBy PageToList 等操作,你可以在Mergetable之后操作\r\nEnglish Message : MergeTable Queryable cannot Take Skip OrderBy PageToList ', '2022-09-15 15:47:50', 0); +INSERT INTO `sys_oper_log` VALUES (288, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 使用 MergeTable不能有 Take Skip OrderBy PageToList 等操作,你可以在Mergetable之后操作\r\nEnglish Message : MergeTable Queryable cannot Take Skip OrderBy PageToList ', '2022-09-15 15:49:56', 0); +INSERT INTO `sys_oper_log` VALUES (289, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'ChatLogSendTime can\'t convert string to datetime', '2022-09-15 16:47:21', 0); +INSERT INTO `sys_oper_log` VALUES (290, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'ChatLogSendTime can\'t convert string to datetime', '2022-09-15 16:49:02', 0); +INSERT INTO `sys_oper_log` VALUES (291, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'FROM\r\n (\r\n SELECT\r\n * \r\n FROM\r\n ( SELECT `sender_guid` AS `SenderGuId`, `recei\' at line 14', '2022-09-15 17:05:40', 0); +INSERT INTO `sys_oper_log` VALUES (292, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '127.0.0.1', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1565505758001500160\",\"ReceiverGuId\":\"1565234480619327488\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-15 19:14:37', 0); +INSERT INTO `sys_oper_log` VALUES (293, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'a.isRead\' in \'field list\'', '2022-09-15 19:42:49', 0); +INSERT INTO `sys_oper_log` VALUES (294, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-15 20:46:47', 0); +INSERT INTO `sys_oper_log` VALUES (295, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-15 20:46:47', 0); +INSERT INTO `sys_oper_log` VALUES (296, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-15 20:50:40', 0); +INSERT INTO `sys_oper_log` VALUES (297, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565505758001500160', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-16 08:30:01', 0); +INSERT INTO `sys_oper_log` VALUES (298, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-16 11:34:27', 0); +INSERT INTO `sys_oper_log` VALUES (299, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-16 15:17:27', 0); +INSERT INTO `sys_oper_log` VALUES (300, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-16 17:16:19', 0); +INSERT INTO `sys_oper_log` VALUES (301, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-16 17:17:03', 0); +INSERT INTO `sys_oper_log` VALUES (302, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:11', 0); +INSERT INTO `sys_oper_log` VALUES (303, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:11', 0); +INSERT INTO `sys_oper_log` VALUES (304, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:12', 0); +INSERT INTO `sys_oper_log` VALUES (305, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:12', 0); +INSERT INTO `sys_oper_log` VALUES (306, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:12', 0); +INSERT INTO `sys_oper_log` VALUES (307, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:12', 0); +INSERT INTO `sys_oper_log` VALUES (308, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:13', 0); +INSERT INTO `sys_oper_log` VALUES (309, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:13', 0); +INSERT INTO `sys_oper_log` VALUES (310, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:13', 0); +INSERT INTO `sys_oper_log` VALUES (311, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:13', 0); +INSERT INTO `sys_oper_log` VALUES (312, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:13', 0); +INSERT INTO `sys_oper_log` VALUES (313, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:17', 0); +INSERT INTO `sys_oper_log` VALUES (314, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:17', 0); +INSERT INTO `sys_oper_log` VALUES (315, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:27', 0); +INSERT INTO `sys_oper_log` VALUES (316, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:27', 0); +INSERT INTO `sys_oper_log` VALUES (317, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:28', 0); +INSERT INTO `sys_oper_log` VALUES (318, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:28', 0); +INSERT INTO `sys_oper_log` VALUES (319, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:28', 0); +INSERT INTO `sys_oper_log` VALUES (320, '注册', 1, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/register', '127.0.0.1', '0 内网IP', '{\"chatusernickname\":\"nmsl\",\"chatusername\":\"nmsl\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名已存在\",\r\n \"data\": null\r\n}', 1, '用户名已存在', '2022-09-16 19:34:28', 0); +INSERT INTO `sys_oper_log` VALUES (321, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"nmsl\",\"password\":\"123456\'\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-16 19:34:36', 0); +INSERT INTO `sys_oper_log` VALUES (322, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"123456\",\"password\":\"123456\'\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-16 19:34:39', 0); +INSERT INTO `sys_oper_log` VALUES (323, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"Ar\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-16 19:35:09', 0); +INSERT INTO `sys_oper_log` VALUES (324, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"kk\",\"password\":\"KK\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-17 08:39:09', 0); +INSERT INTO `sys_oper_log` VALUES (325, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/read', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":{\"friendGuId\":\"1565505758001500160\",\"friendName\":\"zhanggangan\",\"friendNickName\":\"章敢敢\",\"friendImg\":\"http://localhost:8888/uploads/20220902/769047AC858DACD4.jpg\",\"friendNote\":\"敢姐敢姐\",\"createTime\":\"0001-01-01 00:00:00\",\"sex\":\"2\",\"age\":0,\"phone\":null,\"email\":null,\"status\":null,\"isRead\":false}}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Object reference not set to an instance of an object.', '2022-09-17 08:59:10', 0); +INSERT INTO `sys_oper_log` VALUES (326, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/read', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":{\"friendGuId\":\"1565505758001500160\",\"friendName\":\"zhanggangan\",\"friendNickName\":\"章敢敢\",\"friendImg\":\"http://localhost:8888/uploads/20220902/769047AC858DACD4.jpg\",\"friendNote\":\"敢姐敢姐\",\"createTime\":\"0001-01-01 00:00:00\",\"sex\":\"2\",\"age\":0,\"phone\":null,\"email\":null,\"status\":null,\"isRead\":false}}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Object reference not set to an instance of an object.', '2022-09-17 08:59:20', 0); +INSERT INTO `sys_oper_log` VALUES (327, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-17 10:06:29', 0); +INSERT INTO `sys_oper_log` VALUES (328, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-17 10:08:48', 0); +INSERT INTO `sys_oper_log` VALUES (329, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"a\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-17 14:13:52', 0); +INSERT INTO `sys_oper_log` VALUES (330, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"a\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-17 14:13:52', 0); +INSERT INTO `sys_oper_log` VALUES (331, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"sb\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-17 14:13:57', 0); +INSERT INTO `sys_oper_log` VALUES (332, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1570737966291226624\",\"IsGroup\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"已发送申请,请勿重复发送!\",\r\n \"data\": null\r\n}', 1, '已发送申请,请勿重复发送!', '2022-09-17 14:31:48', 0); +INSERT INTO `sys_oper_log` VALUES (333, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1570737966291226624\",\"IsGroup\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"已发送申请,请勿重复发送!\",\r\n \"data\": null\r\n}', 1, '已发送申请,请勿重复发送!', '2022-09-17 14:33:08', 0); +INSERT INTO `sys_oper_log` VALUES (334, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-17 15:27:51', 0); +INSERT INTO `sys_oper_log` VALUES (335, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"GFH\",\"password\":\"GFH\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-17 15:28:49', 0); +INSERT INTO `sys_oper_log` VALUES (336, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-17 15:31:01', 0); +INSERT INTO `sys_oper_log` VALUES (337, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '127.0.0.1', '0 内网IP', '{\"SenderGuId\":\"1565505758001500160\",\"ReceiverGuId\":\"1565234480619327488\",\"Postscript\":\"asd\",\"IsGroup\":false}', '{\r\n \"code\": 0,\r\n \"msg\": \"已发送申请,请勿重复发送!\",\r\n \"data\": null\r\n}', 1, '已发送申请,请勿重复发送!', '2022-09-17 15:31:23', 0); +INSERT INTO `sys_oper_log` VALUES (338, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"aerwen\\\\\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-17 16:02:53', 0); +INSERT INTO `sys_oper_log` VALUES (339, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"aerwen\\\\\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-17 16:02:54', 0); +INSERT INTO `sys_oper_log` VALUES (340, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"aerwen\\\\\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-17 16:02:54', 0); +INSERT INTO `sys_oper_log` VALUES (341, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-19 08:54:06', 0); +INSERT INTO `sys_oper_log` VALUES (342, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-19 09:03:34', 0); +INSERT INTO `sys_oper_log` VALUES (343, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/read', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":\"1565505758001500160\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding..\r\nEnglish Message : Connection open error . Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.', '2022-09-19 09:07:50', 0); +INSERT INTO `sys_oper_log` VALUES (344, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/read', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":\"1565505758001500160\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Reading from the stream has failed..\r\nEnglish Message : Connection open error . Reading from the stream has failed.', '2022-09-19 09:07:51', 0); +INSERT INTO `sys_oper_log` VALUES (345, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/read', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":\"1565234713298341888\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding..\r\nEnglish Message : Connection open error . Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.', '2022-09-19 09:07:52', 0); +INSERT INTO `sys_oper_log` VALUES (346, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/read', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":\"1565505758001500160\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-19 09:07:58', 0); +INSERT INTO `sys_oper_log` VALUES (347, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/read', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1570737966291226624\",\"FriendsGuId\":\"1565505758001500160\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-19 11:40:24', 0); +INSERT INTO `sys_oper_log` VALUES (348, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-19 11:45:09', 0); +INSERT INTO `sys_oper_log` VALUES (349, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-19 15:09:50', 0); +INSERT INTO `sys_oper_log` VALUES (350, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-19 15:10:12', 0); +INSERT INTO `sys_oper_log` VALUES (351, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-19 15:10:45', 0); +INSERT INTO `sys_oper_log` VALUES (352, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1570737966291226624\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-19 15:24:05', 0); +INSERT INTO `sys_oper_log` VALUES (353, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1570737966291226624\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-19 15:25:59', 0); +INSERT INTO `sys_oper_log` VALUES (354, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1570737966291226624\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-19 15:25:59', 0); +INSERT INTO `sys_oper_log` VALUES (355, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1570737966291226624\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-19 15:28:10', 0); +INSERT INTO `sys_oper_log` VALUES (356, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1570737966291226624\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-19 15:28:11', 0); +INSERT INTO `sys_oper_log` VALUES (357, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '127.0.0.1', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1570737966291226624\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-19 15:28:41', 0); +INSERT INTO `sys_oper_log` VALUES (358, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '127.0.0.1', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1570737966291226624\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-19 15:28:41', 0); +INSERT INTO `sys_oper_log` VALUES (359, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '127.0.0.1', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1570737966291226624\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-19 15:28:44', 0); +INSERT INTO `sys_oper_log` VALUES (360, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '127.0.0.1', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1570737966291226624\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-19 15:28:54', 0); +INSERT INTO `sys_oper_log` VALUES (361, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '127.0.0.1', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1565234480619327488\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-19 15:28:58', 0); +INSERT INTO `sys_oper_log` VALUES (362, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '127.0.0.1', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1565234480619327488\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-19 15:28:58', 0); +INSERT INTO `sys_oper_log` VALUES (363, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '127.0.0.1', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1565234480619327488\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-19 15:28:59', 0); +INSERT INTO `sys_oper_log` VALUES (364, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '127.0.0.1', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1565234480619327488\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-19 15:28:59', 0); +INSERT INTO `sys_oper_log` VALUES (365, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1570737966291226624\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-19 15:34:18', 0); +INSERT INTO `sys_oper_log` VALUES (366, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-19 18:57:28', 0); +INSERT INTO `sys_oper_log` VALUES (367, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatFriendLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":66,\"ChatLogType\":1,\"UserGuId\":\"1565505758001500160\",\"FriendsGuId\":\"1565234480619327488\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Reading from the stream has failed..\r\nEnglish Message : Connection open error . Reading from the stream has failed.', '2022-09-19 19:36:22', 0); +INSERT INTO `sys_oper_log` VALUES (368, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatFriendLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":87,\"ChatLogType\":1,\"UserGuId\":\"1565505758001500160\",\"FriendsGuId\":\"1565234480619327488\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Reading from the stream has failed..\r\nEnglish Message : Connection open error . Reading from the stream has failed.', '2022-09-19 19:36:29', 0); +INSERT INTO `sys_oper_log` VALUES (369, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '192.168.1.102', '0 内网IP', '{\"friendName\":\"1\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-19 19:45:04', 0); +INSERT INTO `sys_oper_log` VALUES (370, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-19 20:01:26', 0); +INSERT INTO `sys_oper_log` VALUES (371, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/group/CreateGroup', '192.168.1.102', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\",\"GroupName\":\"pp\",\"GroupImg\":\"\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Field \'group_id\' doesn\'t have a default value', '2022-09-20 11:47:07', 0); +INSERT INTO `sys_oper_log` VALUES (372, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/group/CreateGroup', '192.168.1.102', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\",\"GroupName\":\"pp\",\"GroupImg\":\"http://192.168.1.102:8888/uploads/20220920/8C74FE97C6058FAE.jpg\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Field \'group_id\' doesn\'t have a default value', '2022-09-20 11:48:33', 0); +INSERT INTO `sys_oper_log` VALUES (373, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/group/CreateGroup', '192.168.1.102', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\",\"GroupName\":\"pp\",\"GroupImg\":\"http://192.168.1.102:8888/uploads/20220920/8C74FE97C6058FAE.jpg\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Field \'group_id\' doesn\'t have a default value', '2022-09-20 11:49:40', 0); +INSERT INTO `sys_oper_log` VALUES (374, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-20 14:10:52', 0); +INSERT INTO `sys_oper_log` VALUES (375, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-21 16:24:19', 0); +INSERT INTO `sys_oper_log` VALUES (376, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-21 16:24:19', 0); +INSERT INTO `sys_oper_log` VALUES (377, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"AAA\",\"password\":\"AAA\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-22 10:34:35', 0); +INSERT INTO `sys_oper_log` VALUES (378, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-22 10:48:06', 0); +INSERT INTO `sys_oper_log` VALUES (379, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 11:21:58', 0); +INSERT INTO `sys_oper_log` VALUES (380, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 11:22:05', 0); +INSERT INTO `sys_oper_log` VALUES (381, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 11:22:06', 0); +INSERT INTO `sys_oper_log` VALUES (382, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 11:22:06', 0); +INSERT INTO `sys_oper_log` VALUES (383, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 11:22:06', 0); +INSERT INTO `sys_oper_log` VALUES (384, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 11:22:06', 0); +INSERT INTO `sys_oper_log` VALUES (385, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 11:22:07', 0); +INSERT INTO `sys_oper_log` VALUES (386, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 11:22:07', 0); +INSERT INTO `sys_oper_log` VALUES (387, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 11:22:07', 0); +INSERT INTO `sys_oper_log` VALUES (388, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 11:22:09', 0); +INSERT INTO `sys_oper_log` VALUES (389, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '192.168.1.102', '0 内网IP', '{\"UserGuId\":\"1570737966291226624\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Reading from the stream has failed..\r\nEnglish Message : Connection open error . Reading from the stream has failed.', '2022-09-22 11:23:46', 0); +INSERT INTO `sys_oper_log` VALUES (390, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '192.168.1.102', '0 内网IP', '{\"friendName\":\"孟老师粉丝全\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-22 11:24:15', 0); +INSERT INTO `sys_oper_log` VALUES (391, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '192.168.1.102', '0 内网IP', '{\"friendName\":\"孟老师粉丝\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-09-22 11:24:18', 0); +INSERT INTO `sys_oper_log` VALUES (392, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1572788486128406528\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-22 11:44:51', 0); +INSERT INTO `sys_oper_log` VALUES (393, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1572788486128406528\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-22 11:44:58', 0); +INSERT INTO `sys_oper_log` VALUES (394, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-22 14:31:37', 0); +INSERT INTO `sys_oper_log` VALUES (395, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 14:31:38', 0); +INSERT INTO `sys_oper_log` VALUES (396, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-22 14:31:56', 0); +INSERT INTO `sys_oper_log` VALUES (397, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 15:38:24', 0); +INSERT INTO `sys_oper_log` VALUES (398, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '192.168.1.102', '0 内网IP', '?UserGuId=1565505758001500160', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-22 15:46:43', 0); +INSERT INTO `sys_oper_log` VALUES (399, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-22 16:17:42', 0); +INSERT INTO `sys_oper_log` VALUES (400, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-22 16:17:42', 0); +INSERT INTO `sys_oper_log` VALUES (401, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-22 16:17:43', 0); +INSERT INTO `sys_oper_log` VALUES (402, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-22 16:17:46', 0); +INSERT INTO `sys_oper_log` VALUES (403, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatGroupLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"ChatLogType\":2,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":\"1572070697847623680\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Unknown column \'s.ChatLogSendTime\' in \'order clause\'', '2022-09-22 16:28:13', 0); +INSERT INTO `sys_oper_log` VALUES (404, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-22 20:44:24', 0); +INSERT INTO `sys_oper_log` VALUES (405, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"aerwen\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-22 20:44:53', 0); +INSERT INTO `sys_oper_log` VALUES (406, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"aerwen\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-22 20:44:58', 0); +INSERT INTO `sys_oper_log` VALUES (407, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"aerwen\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-22 20:45:24', 0); +INSERT INTO `sys_oper_log` VALUES (408, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"aerwen\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-22 20:45:51', 0); +INSERT INTO `sys_oper_log` VALUES (409, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"aerwen\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-22 20:46:04', 0); +INSERT INTO `sys_oper_log` VALUES (410, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-23 08:01:23', 0); +INSERT INTO `sys_oper_log` VALUES (411, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatGroupLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"ChatLogType\":2,\"UserGuId\":\"1565505758001500160\",\"FriendsGuId\":\"1572070697847623680\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-23 08:39:28', 0); +INSERT INTO `sys_oper_log` VALUES (412, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '192.168.1.102', '0 内网IP', '{\"UserGuId\":\"1565505758001500160\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-23 08:39:28', 0); +INSERT INTO `sys_oper_log` VALUES (413, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-23 09:58:22', 0); +INSERT INTO `sys_oper_log` VALUES (414, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"zhanggangan\",\"password\":\"zhanggangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-23 10:52:01', 0); +INSERT INTO `sys_oper_log` VALUES (415, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-23 11:41:53', 0); +INSERT INTO `sys_oper_log` VALUES (416, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:05', 0); +INSERT INTO `sys_oper_log` VALUES (417, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:08', 0); +INSERT INTO `sys_oper_log` VALUES (418, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:08', 0); +INSERT INTO `sys_oper_log` VALUES (419, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:13', 0); +INSERT INTO `sys_oper_log` VALUES (420, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:17', 0); +INSERT INTO `sys_oper_log` VALUES (421, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:44', 0); +INSERT INTO `sys_oper_log` VALUES (422, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:45', 0); +INSERT INTO `sys_oper_log` VALUES (423, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:45', 0); +INSERT INTO `sys_oper_log` VALUES (424, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:45', 0); +INSERT INTO `sys_oper_log` VALUES (425, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:45', 0); +INSERT INTO `sys_oper_log` VALUES (426, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:45', 0); +INSERT INTO `sys_oper_log` VALUES (427, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:46', 0); +INSERT INTO `sys_oper_log` VALUES (428, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:46', 0); +INSERT INTO `sys_oper_log` VALUES (429, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:46', 0); +INSERT INTO `sys_oper_log` VALUES (430, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:46', 0); +INSERT INTO `sys_oper_log` VALUES (431, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:46', 0); +INSERT INTO `sys_oper_log` VALUES (432, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:46', 0); +INSERT INTO `sys_oper_log` VALUES (433, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:46', 0); +INSERT INTO `sys_oper_log` VALUES (434, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:46', 0); +INSERT INTO `sys_oper_log` VALUES (435, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:47', 0); +INSERT INTO `sys_oper_log` VALUES (436, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:47', 0); +INSERT INTO `sys_oper_log` VALUES (437, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:47', 0); +INSERT INTO `sys_oper_log` VALUES (438, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:47', 0); +INSERT INTO `sys_oper_log` VALUES (439, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:47', 0); +INSERT INTO `sys_oper_log` VALUES (440, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:47', 0); +INSERT INTO `sys_oper_log` VALUES (441, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:48', 0); +INSERT INTO `sys_oper_log` VALUES (442, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:53', 0); +INSERT INTO `sys_oper_log` VALUES (443, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:43:52', 0); +INSERT INTO `sys_oper_log` VALUES (444, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:44:31', 0); +INSERT INTO `sys_oper_log` VALUES (445, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:44:34', 0); +INSERT INTO `sys_oper_log` VALUES (446, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:44:35', 0); +INSERT INTO `sys_oper_log` VALUES (447, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:44:39', 0); +INSERT INTO `sys_oper_log` VALUES (448, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:44:40', 0); +INSERT INTO `sys_oper_log` VALUES (449, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:44:45', 0); +INSERT INTO `sys_oper_log` VALUES (450, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:44:47', 0); +INSERT INTO `sys_oper_log` VALUES (451, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:44:48', 0); +INSERT INTO `sys_oper_log` VALUES (452, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:44:52', 0); +INSERT INTO `sys_oper_log` VALUES (453, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:44:53', 0); +INSERT INTO `sys_oper_log` VALUES (454, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:28', 0); +INSERT INTO `sys_oper_log` VALUES (455, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:28', 0); +INSERT INTO `sys_oper_log` VALUES (456, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:29', 0); +INSERT INTO `sys_oper_log` VALUES (457, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:29', 0); +INSERT INTO `sys_oper_log` VALUES (458, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:29', 0); +INSERT INTO `sys_oper_log` VALUES (459, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:29', 0); +INSERT INTO `sys_oper_log` VALUES (460, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:29', 0); +INSERT INTO `sys_oper_log` VALUES (461, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:30', 0); +INSERT INTO `sys_oper_log` VALUES (462, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:30', 0); +INSERT INTO `sys_oper_log` VALUES (463, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:30', 0); +INSERT INTO `sys_oper_log` VALUES (464, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:31', 0); +INSERT INTO `sys_oper_log` VALUES (465, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:31', 0); +INSERT INTO `sys_oper_log` VALUES (466, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:31', 0); +INSERT INTO `sys_oper_log` VALUES (467, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:31', 0); +INSERT INTO `sys_oper_log` VALUES (468, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:31', 0); +INSERT INTO `sys_oper_log` VALUES (469, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:32', 0); +INSERT INTO `sys_oper_log` VALUES (470, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:32', 0); +INSERT INTO `sys_oper_log` VALUES (471, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:32', 0); +INSERT INTO `sys_oper_log` VALUES (472, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:32', 0); +INSERT INTO `sys_oper_log` VALUES (473, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:32', 0); +INSERT INTO `sys_oper_log` VALUES (474, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:33', 0); +INSERT INTO `sys_oper_log` VALUES (475, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:33', 0); +INSERT INTO `sys_oper_log` VALUES (476, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:33', 0); +INSERT INTO `sys_oper_log` VALUES (477, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:33', 0); +INSERT INTO `sys_oper_log` VALUES (478, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:33', 0); +INSERT INTO `sys_oper_log` VALUES (479, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:34', 0); +INSERT INTO `sys_oper_log` VALUES (480, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:34', 0); +INSERT INTO `sys_oper_log` VALUES (481, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:34', 0); +INSERT INTO `sys_oper_log` VALUES (482, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:34', 0); +INSERT INTO `sys_oper_log` VALUES (483, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:34', 0); +INSERT INTO `sys_oper_log` VALUES (484, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:35', 0); +INSERT INTO `sys_oper_log` VALUES (485, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:40', 0); +INSERT INTO `sys_oper_log` VALUES (486, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:41', 0); +INSERT INTO `sys_oper_log` VALUES (487, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:41', 0); +INSERT INTO `sys_oper_log` VALUES (488, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:41', 0); +INSERT INTO `sys_oper_log` VALUES (489, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:41', 0); +INSERT INTO `sys_oper_log` VALUES (490, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:41', 0); +INSERT INTO `sys_oper_log` VALUES (491, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:41', 0); +INSERT INTO `sys_oper_log` VALUES (492, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:41', 0); +INSERT INTO `sys_oper_log` VALUES (493, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:48', 0); +INSERT INTO `sys_oper_log` VALUES (494, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:55', 0); +INSERT INTO `sys_oper_log` VALUES (495, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:56', 0); +INSERT INTO `sys_oper_log` VALUES (496, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:55', 0); +INSERT INTO `sys_oper_log` VALUES (497, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:56', 0); +INSERT INTO `sys_oper_log` VALUES (498, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:47:56', 0); +INSERT INTO `sys_oper_log` VALUES (499, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:13', 0); +INSERT INTO `sys_oper_log` VALUES (500, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:13', 0); +INSERT INTO `sys_oper_log` VALUES (501, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:13', 0); +INSERT INTO `sys_oper_log` VALUES (502, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:13', 0); +INSERT INTO `sys_oper_log` VALUES (503, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:13', 0); +INSERT INTO `sys_oper_log` VALUES (504, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:14', 0); +INSERT INTO `sys_oper_log` VALUES (505, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:14', 0); +INSERT INTO `sys_oper_log` VALUES (506, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:14', 0); +INSERT INTO `sys_oper_log` VALUES (507, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:14', 0); +INSERT INTO `sys_oper_log` VALUES (508, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:14', 0); +INSERT INTO `sys_oper_log` VALUES (509, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:14', 0); +INSERT INTO `sys_oper_log` VALUES (510, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:15', 0); +INSERT INTO `sys_oper_log` VALUES (511, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:15', 0); +INSERT INTO `sys_oper_log` VALUES (512, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:15', 0); +INSERT INTO `sys_oper_log` VALUES (513, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:15', 0); +INSERT INTO `sys_oper_log` VALUES (514, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:15', 0); +INSERT INTO `sys_oper_log` VALUES (515, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:15', 0); +INSERT INTO `sys_oper_log` VALUES (516, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:16', 0); +INSERT INTO `sys_oper_log` VALUES (517, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:16', 0); +INSERT INTO `sys_oper_log` VALUES (518, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:16', 0); +INSERT INTO `sys_oper_log` VALUES (519, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:16', 0); +INSERT INTO `sys_oper_log` VALUES (520, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:17', 0); +INSERT INTO `sys_oper_log` VALUES (521, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:17', 0); +INSERT INTO `sys_oper_log` VALUES (522, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:17', 0); +INSERT INTO `sys_oper_log` VALUES (523, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:17', 0); +INSERT INTO `sys_oper_log` VALUES (524, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:17', 0); +INSERT INTO `sys_oper_log` VALUES (525, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:20', 0); +INSERT INTO `sys_oper_log` VALUES (526, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:20', 0); +INSERT INTO `sys_oper_log` VALUES (527, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:21', 0); +INSERT INTO `sys_oper_log` VALUES (528, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:21', 0); +INSERT INTO `sys_oper_log` VALUES (529, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:21', 0); +INSERT INTO `sys_oper_log` VALUES (530, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:21', 0); +INSERT INTO `sys_oper_log` VALUES (531, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:22', 0); +INSERT INTO `sys_oper_log` VALUES (532, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:21', 0); +INSERT INTO `sys_oper_log` VALUES (533, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:22', 0); +INSERT INTO `sys_oper_log` VALUES (534, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:22', 0); +INSERT INTO `sys_oper_log` VALUES (535, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:22', 0); +INSERT INTO `sys_oper_log` VALUES (536, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:23', 0); +INSERT INTO `sys_oper_log` VALUES (537, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:23', 0); +INSERT INTO `sys_oper_log` VALUES (538, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:23', 0); +INSERT INTO `sys_oper_log` VALUES (539, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:23', 0); +INSERT INTO `sys_oper_log` VALUES (540, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:24', 0); +INSERT INTO `sys_oper_log` VALUES (541, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:24', 0); +INSERT INTO `sys_oper_log` VALUES (542, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:24', 0); +INSERT INTO `sys_oper_log` VALUES (543, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:24', 0); +INSERT INTO `sys_oper_log` VALUES (544, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:24', 0); +INSERT INTO `sys_oper_log` VALUES (545, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:25', 0); +INSERT INTO `sys_oper_log` VALUES (546, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:25', 0); +INSERT INTO `sys_oper_log` VALUES (547, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:25', 0); +INSERT INTO `sys_oper_log` VALUES (548, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:25', 0); +INSERT INTO `sys_oper_log` VALUES (549, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:25', 0); +INSERT INTO `sys_oper_log` VALUES (550, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:25', 0); +INSERT INTO `sys_oper_log` VALUES (551, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:25', 0); +INSERT INTO `sys_oper_log` VALUES (552, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:26', 0); +INSERT INTO `sys_oper_log` VALUES (553, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:26', 0); +INSERT INTO `sys_oper_log` VALUES (554, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:26', 0); +INSERT INTO `sys_oper_log` VALUES (555, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:26', 0); +INSERT INTO `sys_oper_log` VALUES (556, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:26', 0); +INSERT INTO `sys_oper_log` VALUES (557, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:26', 0); +INSERT INTO `sys_oper_log` VALUES (558, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:27', 0); +INSERT INTO `sys_oper_log` VALUES (559, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:27', 0); +INSERT INTO `sys_oper_log` VALUES (560, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:27', 0); +INSERT INTO `sys_oper_log` VALUES (561, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:27', 0); +INSERT INTO `sys_oper_log` VALUES (562, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:27', 0); +INSERT INTO `sys_oper_log` VALUES (563, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:27', 0); +INSERT INTO `sys_oper_log` VALUES (564, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:27', 0); +INSERT INTO `sys_oper_log` VALUES (565, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:28', 0); +INSERT INTO `sys_oper_log` VALUES (566, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:28', 0); +INSERT INTO `sys_oper_log` VALUES (567, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:28', 0); +INSERT INTO `sys_oper_log` VALUES (568, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:28', 0); +INSERT INTO `sys_oper_log` VALUES (569, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:28', 0); +INSERT INTO `sys_oper_log` VALUES (570, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:28', 0); +INSERT INTO `sys_oper_log` VALUES (571, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:28', 0); +INSERT INTO `sys_oper_log` VALUES (572, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:28', 0); +INSERT INTO `sys_oper_log` VALUES (573, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:29', 0); +INSERT INTO `sys_oper_log` VALUES (574, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:29', 0); +INSERT INTO `sys_oper_log` VALUES (575, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:29', 0); +INSERT INTO `sys_oper_log` VALUES (576, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:29', 0); +INSERT INTO `sys_oper_log` VALUES (577, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:30', 0); +INSERT INTO `sys_oper_log` VALUES (578, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:30', 0); +INSERT INTO `sys_oper_log` VALUES (579, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:30', 0); +INSERT INTO `sys_oper_log` VALUES (580, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:30', 0); +INSERT INTO `sys_oper_log` VALUES (581, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:30', 0); +INSERT INTO `sys_oper_log` VALUES (582, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:30', 0); +INSERT INTO `sys_oper_log` VALUES (583, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:30', 0); +INSERT INTO `sys_oper_log` VALUES (584, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:31', 0); +INSERT INTO `sys_oper_log` VALUES (585, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:31', 0); +INSERT INTO `sys_oper_log` VALUES (586, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:31', 0); +INSERT INTO `sys_oper_log` VALUES (587, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:31', 0); +INSERT INTO `sys_oper_log` VALUES (588, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:31', 0); +INSERT INTO `sys_oper_log` VALUES (589, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:32', 0); +INSERT INTO `sys_oper_log` VALUES (590, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:32', 0); +INSERT INTO `sys_oper_log` VALUES (591, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:32', 0); +INSERT INTO `sys_oper_log` VALUES (592, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:32', 0); +INSERT INTO `sys_oper_log` VALUES (593, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:32', 0); +INSERT INTO `sys_oper_log` VALUES (594, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:32', 0); +INSERT INTO `sys_oper_log` VALUES (595, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:33', 0); +INSERT INTO `sys_oper_log` VALUES (596, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:33', 0); +INSERT INTO `sys_oper_log` VALUES (597, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:33', 0); +INSERT INTO `sys_oper_log` VALUES (598, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:33', 0); +INSERT INTO `sys_oper_log` VALUES (599, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:33', 0); +INSERT INTO `sys_oper_log` VALUES (600, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:33', 0); +INSERT INTO `sys_oper_log` VALUES (601, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:34', 0); +INSERT INTO `sys_oper_log` VALUES (602, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:34', 0); +INSERT INTO `sys_oper_log` VALUES (603, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:34', 0); +INSERT INTO `sys_oper_log` VALUES (604, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:34', 0); +INSERT INTO `sys_oper_log` VALUES (605, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:34', 0); +INSERT INTO `sys_oper_log` VALUES (606, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:35', 0); +INSERT INTO `sys_oper_log` VALUES (607, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:35', 0); +INSERT INTO `sys_oper_log` VALUES (608, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:36', 0); +INSERT INTO `sys_oper_log` VALUES (609, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:36', 0); +INSERT INTO `sys_oper_log` VALUES (610, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:36', 0); +INSERT INTO `sys_oper_log` VALUES (611, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:36', 0); +INSERT INTO `sys_oper_log` VALUES (612, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:38', 0); +INSERT INTO `sys_oper_log` VALUES (613, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:37', 0); +INSERT INTO `sys_oper_log` VALUES (614, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:37', 0); +INSERT INTO `sys_oper_log` VALUES (615, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:38', 0); +INSERT INTO `sys_oper_log` VALUES (616, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:38', 0); +INSERT INTO `sys_oper_log` VALUES (617, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:38', 0); +INSERT INTO `sys_oper_log` VALUES (618, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:39', 0); +INSERT INTO `sys_oper_log` VALUES (619, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:38', 0); +INSERT INTO `sys_oper_log` VALUES (620, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:39', 0); +INSERT INTO `sys_oper_log` VALUES (621, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (622, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (623, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (624, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (625, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (626, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (627, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (628, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (629, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (630, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (631, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:41', 0); +INSERT INTO `sys_oper_log` VALUES (632, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (633, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:41', 0); +INSERT INTO `sys_oper_log` VALUES (634, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:40', 0); +INSERT INTO `sys_oper_log` VALUES (635, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:41', 0); +INSERT INTO `sys_oper_log` VALUES (636, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:41', 0); +INSERT INTO `sys_oper_log` VALUES (637, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:41', 0); +INSERT INTO `sys_oper_log` VALUES (638, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:41', 0); +INSERT INTO `sys_oper_log` VALUES (639, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:42', 0); +INSERT INTO `sys_oper_log` VALUES (640, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:42', 0); +INSERT INTO `sys_oper_log` VALUES (641, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:42', 0); +INSERT INTO `sys_oper_log` VALUES (642, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:43', 0); +INSERT INTO `sys_oper_log` VALUES (643, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:43', 0); +INSERT INTO `sys_oper_log` VALUES (644, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:43', 0); +INSERT INTO `sys_oper_log` VALUES (645, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:44', 0); +INSERT INTO `sys_oper_log` VALUES (646, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:44', 0); +INSERT INTO `sys_oper_log` VALUES (647, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:45', 0); +INSERT INTO `sys_oper_log` VALUES (648, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:45', 0); +INSERT INTO `sys_oper_log` VALUES (649, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:45', 0); +INSERT INTO `sys_oper_log` VALUES (650, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:45', 0); +INSERT INTO `sys_oper_log` VALUES (651, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:45', 0); +INSERT INTO `sys_oper_log` VALUES (652, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:45', 0); +INSERT INTO `sys_oper_log` VALUES (653, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:45', 0); +INSERT INTO `sys_oper_log` VALUES (654, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:46', 0); +INSERT INTO `sys_oper_log` VALUES (655, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:46', 0); +INSERT INTO `sys_oper_log` VALUES (656, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:46', 0); +INSERT INTO `sys_oper_log` VALUES (657, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:46', 0); +INSERT INTO `sys_oper_log` VALUES (658, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:46', 0); +INSERT INTO `sys_oper_log` VALUES (659, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:46', 0); +INSERT INTO `sys_oper_log` VALUES (660, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:47', 0); +INSERT INTO `sys_oper_log` VALUES (661, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":2,\"SenderGuId\":\"1570737966291226624\",\"ReceiverGuId\":\"1572070697847623680\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:48:47', 0); +INSERT INTO `sys_oper_log` VALUES (662, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1570737966291226624\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:49:39', 0); +INSERT INTO `sys_oper_log` VALUES (663, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1570737966291226624\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:49:39', 0); +INSERT INTO `sys_oper_log` VALUES (664, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1570737966291226624\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-23 11:49:39', 0); +INSERT INTO `sys_oper_log` VALUES (665, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-23 11:51:10', 0); +INSERT INTO `sys_oper_log` VALUES (666, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/captchaImage', '192.168.1.102', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 10:12:51', 0); +INSERT INTO `sys_oper_log` VALUES (667, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-26 10:29:17', 0); +INSERT INTO `sys_oper_log` VALUES (668, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 14:11:46', 0); +INSERT INTO `sys_oper_log` VALUES (669, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatFriendLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"ChatLogType\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":\"1565505758001500160\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 14:11:49', 0); +INSERT INTO `sys_oper_log` VALUES (670, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 14:12:08', 0); +INSERT INTO `sys_oper_log` VALUES (671, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '192.168.1.102', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 14:12:08', 0); +INSERT INTO `sys_oper_log` VALUES (672, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '192.168.1.102', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 14:12:08', 0); +INSERT INTO `sys_oper_log` VALUES (673, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatFriendLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"ChatLogType\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":\"1565505758001500160\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 14:12:10', 0); +INSERT INTO `sys_oper_log` VALUES (674, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 14:15:58', 0); +INSERT INTO `sys_oper_log` VALUES (675, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '192.168.1.102', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 14:15:58', 0); +INSERT INTO `sys_oper_log` VALUES (676, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 14:16:09', 0); +INSERT INTO `sys_oper_log` VALUES (677, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '192.168.1.102', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 14:16:09', 0); +INSERT INTO `sys_oper_log` VALUES (678, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/addChatFriendLog', '192.168.1.102', '0 内网IP', '{\"ChatLogType\":1,\"SenderGuId\":\"1565234480619327488\",\"ReceiverGuId\":\"1570737966291226624\",\"ChatLogContent\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Column \'chat_log_content\' cannot be null', '2022-09-26 15:37:57', 0); +INSERT INTO `sys_oper_log` VALUES (679, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 15:52:47', 0); +INSERT INTO `sys_oper_log` VALUES (680, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-26 20:36:48', 0); +INSERT INTO `sys_oper_log` VALUES (681, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Reading from the stream has failed..\r\nEnglish Message : Connection open error . Reading from the stream has failed.', '2022-09-26 20:45:53', 0); +INSERT INTO `sys_oper_log` VALUES (682, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 20:48:43', 0); +INSERT INTO `sys_oper_log` VALUES (683, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 20:48:43', 0); +INSERT INTO `sys_oper_log` VALUES (684, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 20:48:53', 0); +INSERT INTO `sys_oper_log` VALUES (685, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 20:48:54', 0); +INSERT INTO `sys_oper_log` VALUES (686, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-26 20:51:18', 0); +INSERT INTO `sys_oper_log` VALUES (687, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1570737966291226624', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 20:51:51', 0); +INSERT INTO `sys_oper_log` VALUES (688, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 20:52:08', 0); +INSERT INTO `sys_oper_log` VALUES (689, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 21:01:31', 0); +INSERT INTO `sys_oper_log` VALUES (690, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1570737966291226624\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 21:01:31', 0); +INSERT INTO `sys_oper_log` VALUES (691, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"UserGuId\":\"1565234480619327488\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 21:02:52', 0); +INSERT INTO `sys_oper_log` VALUES (692, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-26 21:29:56', 0); +INSERT INTO `sys_oper_log` VALUES (693, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-26 21:30:06', 0); +INSERT INTO `sys_oper_log` VALUES (694, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-26 21:30:18', 0); +INSERT INTO `sys_oper_log` VALUES (695, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-26 21:30:23', 0); +INSERT INTO `sys_oper_log` VALUES (696, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-26 21:30:24', 0); +INSERT INTO `sys_oper_log` VALUES (697, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-26 21:31:04', 0); +INSERT INTO `sys_oper_log` VALUES (698, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 21:31:17', 0); +INSERT INTO `sys_oper_log` VALUES (699, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 21:31:17', 0); +INSERT INTO `sys_oper_log` VALUES (700, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 21:31:17', 0); +INSERT INTO `sys_oper_log` VALUES (701, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 21:31:18', 0); +INSERT INTO `sys_oper_log` VALUES (702, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '127.0.0.1', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 21:31:19', 0); +INSERT INTO `sys_oper_log` VALUES (703, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-26 21:31:31', 0); +INSERT INTO `sys_oper_log` VALUES (704, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '127.0.0.1', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-27 07:02:05', 0); +INSERT INTO `sys_oper_log` VALUES (705, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-27 08:26:16', 0); +INSERT INTO `sys_oper_log` VALUES (706, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-27 08:37:30', 0); +INSERT INTO `sys_oper_log` VALUES (707, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '192.168.1.102', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-27 17:02:36', 0); +INSERT INTO `sys_oper_log` VALUES (708, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aaa\",\"password\":\"aaa\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-27 17:04:29', 0); +INSERT INTO `sys_oper_log` VALUES (709, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '192.168.1.102', '0 内网IP', '?UserGuId=1565505758001500160', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-27 17:51:37', 0); +INSERT INTO `sys_oper_log` VALUES (710, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatFriendLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"ChatLogType\":1,\"UserGuId\":\"1565505758001500160\",\"FriendsGuId\":\"1565234480619327488\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-27 17:52:34', 0); +INSERT INTO `sys_oper_log` VALUES (711, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '192.168.1.102', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-27 18:33:30', 0); +INSERT INTO `sys_oper_log` VALUES (712, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatFriendLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"ChatLogType\":1,\"UserGuId\":\"1565505758001500160\",\"FriendsGuId\":\"1565234480619327488\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-27 18:47:39', 0); +INSERT INTO `sys_oper_log` VALUES (713, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-27 18:48:10', 0); +INSERT INTO `sys_oper_log` VALUES (714, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '192.168.1.102', '0 内网IP', '?UserGuId=1565505758001500160', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Fatal error encountered during command execution..\r\nEnglish Message : Connection open error . Fatal error encountered during command execution.', '2022-09-27 18:48:23', 0); +INSERT INTO `sys_oper_log` VALUES (715, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '192.168.1.102', '0 内网IP', '?UserGuId=1565505758001500160', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Connect Timeout expired..\r\nEnglish Message : Connection open error . Connect Timeout expired.', '2022-09-27 19:17:03', 0); +INSERT INTO `sys_oper_log` VALUES (716, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '192.168.1.102', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Connect Timeout expired..\r\nEnglish Message : Connection open error . Connect Timeout expired.', '2022-09-27 19:17:06', 0); +INSERT INTO `sys_oper_log` VALUES (717, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Failed to read the result set.', '2022-09-27 19:17:06', 0); +INSERT INTO `sys_oper_log` VALUES (718, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Connect Timeout expired..\r\nEnglish Message : Connection open error . Connect Timeout expired.', '2022-09-27 19:17:06', 0); +INSERT INTO `sys_oper_log` VALUES (719, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '192.168.1.102', '0 内网IP', '?UserGuId=1565505758001500160', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Connect Timeout expired..\r\nEnglish Message : Connection open error . Connect Timeout expired.', '2022-09-27 19:17:03', 0); +INSERT INTO `sys_oper_log` VALUES (720, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565505758001500160\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Connect Timeout expired..\r\nEnglish Message : Connection open error . Connect Timeout expired.', '2022-09-27 19:17:22', 0); +INSERT INTO `sys_oper_log` VALUES (721, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '192.168.1.102', '0 内网IP', '{\"UserGuId\":\"1565505758001500160\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Connect Timeout expired..\r\nEnglish Message : Connection open error . Connect Timeout expired.', '2022-09-27 19:17:22', 0); +INSERT INTO `sys_oper_log` VALUES (722, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatFriendLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"ChatLogType\":1,\"UserGuId\":\"1565505758001500160\",\"FriendsGuId\":\"1565234480619327488\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Connect Timeout expired..\r\nEnglish Message : Connection open error . Connect Timeout expired.', '2022-09-27 19:17:22', 0); +INSERT INTO `sys_oper_log` VALUES (723, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-27 20:07:00', 0); +INSERT INTO `sys_oper_log` VALUES (724, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/getInfo', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\"}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Connect Timeout expired..\r\nEnglish Message : Connection open error . Connect Timeout expired.', '2022-09-27 20:17:13', 0); +INSERT INTO `sys_oper_log` VALUES (725, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/ChatLog/chatLogList', '192.168.1.102', '0 内网IP', '{\"pageSize\":20,\"pageNum\":1,\"UserGuId\":\"1565234480619327488\",\"FriendsGuId\":null}', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'Failed to read the result set.', '2022-09-27 20:18:53', 0); +INSERT INTO `sys_oper_log` VALUES (726, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"zhangagangan\",\"password\":\"zhangagangan\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-28 10:24:22', 0); +INSERT INTO `sys_oper_log` VALUES (727, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/apply/applyList', '192.168.1.102', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'The Command Timeout expired before the operation completed.', '2022-09-28 17:01:39', 0); +INSERT INTO `sys_oper_log` VALUES (728, NULL, 0, NULL, 'GET', 0, NULL, NULL, '/business/friends/friendsList', '192.168.1.102', '0 内网IP', '?UserGuId=1565234480619327488', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, '中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Connect Timeout expired..\r\nEnglish Message : Connection open error . Connect Timeout expired.', '2022-09-28 17:05:57', 0); +INSERT INTO `sys_oper_log` VALUES (729, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-29 08:15:13', 0); +INSERT INTO `sys_oper_log` VALUES (730, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"AAA\",\"password\":\"AAA\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-29 09:41:14', 0); +INSERT INTO `sys_oper_log` VALUES (731, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-29 09:59:59', 0); +INSERT INTO `sys_oper_log` VALUES (732, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '192.168.1.102', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-29 10:15:07', 0); +INSERT INTO `sys_oper_log` VALUES (733, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-29 11:06:18', 0); +INSERT INTO `sys_oper_log` VALUES (734, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/login', '127.0.0.1', '0 内网IP', '{\"username\":\"aerwen\",\"password\":\"123456\",\"code\":\"1\",\"uuid\":\"d4b4319d43ae4388a3849e155fcc8b94\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-09-29 14:10:06', 0); +INSERT INTO `sys_oper_log` VALUES (735, NULL, 0, NULL, 'GET', 0, 'admin', NULL, '/business/student/getClassList', '127.0.0.1', '0 内网IP', '', '{\r\n \"code\": 500,\r\n \"msg\": \"服务器好像出了点问题......\",\r\n \"data\": null\r\n}', 1, 'The Command Timeout expired before the operation completed.', '2022-09-29 14:16:48', 0); +INSERT INTO `sys_oper_log` VALUES (736, '聊天室用户修改登录状态', 2, NULL, 'PUT', 0, 'admin', NULL, '/business/chatUser/updateChatUserStatus', '127.0.0.1', '0 内网IP', '{\"status\":1}', '{\r\n \"code\": 0,\r\n \"msg\": \"修改失败\",\r\n \"data\": null\r\n}', 1, '修改失败', '2022-09-29 19:01:49', 0); +INSERT INTO `sys_oper_log` VALUES (737, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-30 09:57:00', 0); +INSERT INTO `sys_oper_log` VALUES (738, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-30 10:02:35', 0); +INSERT INTO `sys_oper_log` VALUES (739, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-30 10:04:09', 0); +INSERT INTO `sys_oper_log` VALUES (740, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-09-30 10:04:22', 0); +INSERT INTO `sys_oper_log` VALUES (741, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.237.13.90', '广东省 佛山市', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\n \"code\": 105,\n \"msg\": \"账号已在别处登录\",\n \"data\": null\n}', 1, '账号已在别处登录', '2022-09-30 10:19:00', 0); +INSERT INTO `sys_oper_log` VALUES (742, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.237.13.90', '广东省 佛山市', '{\"chatusername\":\"AERWEN\",\"password\":\"123456\"}', '{\n \"code\": 105,\n \"msg\": \"用户名或密码错误\",\n \"data\": null\n}', 1, '用户名或密码错误', '2022-09-30 10:26:19', 0); +INSERT INTO `sys_oper_log` VALUES (743, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '120.237.13.90', '广东省 佛山市', '{\"friendName\":\"梦\"}', '{\n \"code\": 0,\n \"msg\": \"用户或群聊不存在\",\n \"data\": null\n}', 1, '用户或群聊不存在', '2022-09-30 11:15:42', 0); +INSERT INTO `sys_oper_log` VALUES (744, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.237.13.90', '广东省 佛山市', '{\"chatusername\":\"2235475551\",\"password\":\"13726687957\"}', '{\n \"code\": 105,\n \"msg\": \"账号已在别处登录\",\n \"data\": null\n}', 1, '账号已在别处登录', '2022-09-30 11:20:08', 0); +INSERT INTO `sys_oper_log` VALUES (745, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.237.13.90', '广东省 佛山市', '{\"chatusername\":\"aerwen\",\"password\":\"aerwen\"}', '{\n \"code\": 105,\n \"msg\": \"账号已在别处登录\",\n \"data\": null\n}', 1, '账号已在别处登录', '2022-09-30 11:22:31', 0); +INSERT INTO `sys_oper_log` VALUES (746, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.237.13.90', '广东省 佛山市', '{\"chatusername\":\"aerwen\",\"password\":\"aerwen\"}', '{\n \"code\": 105,\n \"msg\": \"账号已在别处登录\",\n \"data\": null\n}', 1, '账号已在别处登录', '2022-09-30 11:22:35', 0); +INSERT INTO `sys_oper_log` VALUES (747, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.237.13.90', '广东省 佛山市', '{\"chatusername\":\"2235475551\",\"password\":\"13726687957\"}', '{\n \"code\": 105,\n \"msg\": \"账号已在别处登录\",\n \"data\": null\n}', 1, '账号已在别处登录', '2022-09-30 11:24:09', 0); +INSERT INTO `sys_oper_log` VALUES (748, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.197.198.57', '广东省 东莞市', '{\"chatusername\":\"test\",\"password\":\"123456\"}', '{\n \"code\": 105,\n \"msg\": \"用户名或密码错误\",\n \"data\": null\n}', 1, '用户名或密码错误', '2022-09-30 11:28:52', 0); +INSERT INTO `sys_oper_log` VALUES (749, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.84.12.182', '广东省 佛山市', '{\"chatusername\":\"aerwen\",\"password\":\"1234556\"}', '{\n \"code\": 105,\n \"msg\": \"用户名或密码错误\",\n \"data\": null\n}', 1, '用户名或密码错误', '2022-10-03 14:24:30', 0); +INSERT INTO `sys_oper_log` VALUES (750, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.84.12.182', '广东省 佛山市', '{\"chatusername\":\"aerwen\",\"password\":\"aerwen\\\\\"}', '{\n \"code\": 105,\n \"msg\": \"用户名或密码错误\",\n \"data\": null\n}', 1, '用户名或密码错误', '2022-10-03 17:08:07', 0); +INSERT INTO `sys_oper_log` VALUES (751, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/apply/sendApply', '120.84.12.182', '广东省 佛山市', '{\"SenderGuId\":\"1576821155204042752\",\"ReceiverGuId\":\"1575681464765386752\",\"Postscript\":\"d\",\"IsGroup\":false}', '{\n \"code\": 0,\n \"msg\": \"已发送申请,请勿重复发送!\",\n \"data\": null\n}', 1, '已发送申请,请勿重复发送!', '2022-10-03 17:12:28', 0); +INSERT INTO `sys_oper_log` VALUES (752, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '120.84.12.182', '广东省 佛山市', '{\"friendName\":\"tesst\"}', '{\n \"code\": 0,\n \"msg\": \"用户或群聊不存在\",\n \"data\": null\n}', 1, '用户或群聊不存在', '2022-10-03 17:23:09', 0); +INSERT INTO `sys_oper_log` VALUES (753, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"s\",\"password\":\"s\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"账号已在别处登录\",\r\n \"data\": null\r\n}', 1, '账号已在别处登录', '2022-10-03 23:18:31', 0); +INSERT INTO `sys_oper_log` VALUES (754, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.84.12.182', '广东省 佛山市', '{\"chatusername\":\"aerwen\",\"password\":\"aerwen\"}', '{\n \"code\": 105,\n \"msg\": \"账号已在别处登录\",\n \"data\": null\n}', 1, '账号已在别处登录', '2022-10-05 14:57:58', 0); +INSERT INTO `sys_oper_log` VALUES (755, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"aerwen\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-10-08 09:00:38', 0); +INSERT INTO `sys_oper_log` VALUES (756, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"test\",\"password\":\"test\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-10-08 09:00:44', 0); +INSERT INTO `sys_oper_log` VALUES (757, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '127.0.0.1', '0 内网IP', '{\"chatusername\":\"test\",\"password\":\"123456\"}', '{\r\n \"code\": 105,\r\n \"msg\": \"用户名或密码错误\",\r\n \"data\": null\r\n}', 1, '用户名或密码错误', '2022-10-08 09:00:49', 0); +INSERT INTO `sys_oper_log` VALUES (758, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/friends/findFriends', '127.0.0.1', '0 内网IP', '{\"friendName\":\"test\"}', '{\r\n \"code\": 0,\r\n \"msg\": \"用户或群聊不存在\",\r\n \"data\": null\r\n}', 1, '用户或群聊不存在', '2022-10-08 09:01:24', 0); +INSERT INTO `sys_oper_log` VALUES (759, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.237.13.90', '广东省 佛山市', '{\"chatusername\":\"test\",\"password\":\"test\"}', '{\n \"code\": 105,\n \"msg\": \"用户名或密码错误\",\n \"data\": null\n}', 1, '用户名或密码错误', '2022-10-08 09:49:47', 0); +INSERT INTO `sys_oper_log` VALUES (760, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/chatLogin/login', '120.237.13.90', '广东省 佛山市', '{\"chatusername\":\"aerwen\",\"password\":\"aerwen\"}', '{\n \"code\": 105,\n \"msg\": \"用户名或密码错误\",\n \"data\": null\n}', 1, '用户名或密码错误', '2022-10-08 09:49:55', 0); +INSERT INTO `sys_oper_log` VALUES (761, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/business/group/CreateGroup', '120.237.13.90', '广东省 佛山市', '{\"UserGuId\":\"1578550991593279488\",\"GroupName\":null,\"GroupImg\":\"http://chat.aerwen.net/dev-api//uploads/20221008/0C3F3D49CF5927C1.jpg\"}', '{\n \"code\": 500,\n \"msg\": \"服务器好像出了点问题......\",\n \"data\": null\n}', 1, 'Column \'group_name\' cannot be null', '2022-10-08 17:09:23', 0); + +-- ---------------------------- +-- Table structure for sys_post +-- ---------------------------- +DROP TABLE IF EXISTS `sys_post`; +CREATE TABLE `sys_post` ( + `postId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '岗位ID', + `postCode` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '岗位编码', + `postName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '岗位名称', + `postSort` int(11) NOT NULL COMMENT '显示顺序', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '状态(0正常 1停用)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`postId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_post +-- ---------------------------- +INSERT INTO `sys_post` VALUES (1, 'CEO', '董事长', 1, '0', '', '2022-07-26 10:02:19', '', NULL, '', NULL); +INSERT INTO `sys_post` VALUES (2, 'SE', '项目经理', 2, '0', '', '2022-07-26 10:02:19', '', NULL, '', NULL); +INSERT INTO `sys_post` VALUES (3, 'HR', '人力资源', 3, '0', '', '2022-07-26 10:02:19', '', NULL, '', NULL); +INSERT INTO `sys_post` VALUES (4, 'USER', '普通员工', 4, '0', '', '2022-07-26 10:02:19', '', NULL, '', NULL); +INSERT INTO `sys_post` VALUES (6, 'PM', '人事经理', 0, '0', NULL, '2022-07-26 10:02:19', '', NULL, NULL, NULL); +INSERT INTO `sys_post` VALUES (7, 'GM', '总经理', 0, '0', NULL, '2022-07-26 10:02:19', '', NULL, NULL, NULL); +INSERT INTO `sys_post` VALUES (8, 'COO', '首席运营官', 0, '0', NULL, '2022-07-26 10:02:19', '', NULL, NULL, NULL); +INSERT INTO `sys_post` VALUES (9, 'CFO', '首席财务官', 0, '0', NULL, '2022-07-26 10:02:19', '', NULL, NULL, NULL); +INSERT INTO `sys_post` VALUES (10, 'CTO', '首席技术官', 0, '0', NULL, '2022-07-26 10:02:19', '', NULL, NULL, NULL); +INSERT INTO `sys_post` VALUES (11, 'HRD', '人力资源总监', 0, '0', NULL, '2022-07-26 10:02:19', '', NULL, NULL, NULL); +INSERT INTO `sys_post` VALUES (12, 'VP', '副总裁', 0, '0', NULL, '2022-07-26 10:02:20', '', NULL, NULL, NULL); +INSERT INTO `sys_post` VALUES (13, 'OD', '运营总监', 0, '0', NULL, '2022-07-26 10:02:20', '', NULL, NULL, NULL); +INSERT INTO `sys_post` VALUES (14, 'MD', '市场总监', 0, '0', NULL, '2022-07-26 10:02:20', '', NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role`; +CREATE TABLE `sys_role` ( + `roleId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色ID', + `roleName` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称', + `roleKey` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色权限字符串', + `roleSort` int(11) NOT NULL COMMENT '显示顺序', + `dataScope` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 )', + `menu_check_strictly` bit(1) NOT NULL, + `dept_check_strictly` bit(1) NOT NULL, + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色状态(0正常 1停用)', + `delFlag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`roleId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- +INSERT INTO `sys_role` VALUES (1, '超级管理员', 'admin', 1, '1', b'1', b'0', '0', '0', 'admin', '2022-07-26 10:18:32', 'system', NULL, '超级管理员', NULL); +INSERT INTO `sys_role` VALUES (2, '普通角色', 'common', 2, '2', b'1', b'0', '0', '0', 'admin', '2022-07-26 10:18:32', 'system', NULL, '普通角色', NULL); + +-- ---------------------------- +-- Table structure for sys_role_dept +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_dept`; +CREATE TABLE `sys_role_dept` ( + `RoleId` bigint(20) NOT NULL, + `DeptId` bigint(20) NOT NULL +) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = FIXED; + +-- ---------------------------- +-- Records of sys_role_dept +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_menu`; +CREATE TABLE `sys_role_menu` ( + `role_id` bigint(20) NOT NULL COMMENT '角色ID', + `menu_id` bigint(20) NOT NULL COMMENT '菜单ID', + `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `create_time` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`role_id`, `menu_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_role_menu +-- ---------------------------- +INSERT INTO `sys_role_menu` VALUES (2, 1, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 3, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 5, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 6, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 100, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 101, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 102, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 103, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 104, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 106, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 108, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 109, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 500, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 501, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 1001, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 1008, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 1013, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 1018, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 1022, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 1044, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 1051, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2016, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2017, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2018, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2019, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2020, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2021, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2022, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2023, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2024, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2025, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2026, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2027, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (2, 2030, 'admin', '2022-08-19 21:12:26'); +INSERT INTO `sys_role_menu` VALUES (3, 4, NULL, '2022-07-26 10:02:21'); +INSERT INTO `sys_role_menu` VALUES (3, 118, NULL, '2022-07-26 10:02:21'); +INSERT INTO `sys_role_menu` VALUES (3, 1047, NULL, '2022-07-26 10:02:21'); +INSERT INTO `sys_role_menu` VALUES (3, 1048, NULL, '2022-07-26 10:02:21'); +INSERT INTO `sys_role_menu` VALUES (3, 1049, NULL, '2022-07-26 10:02:21'); +INSERT INTO `sys_role_menu` VALUES (3, 1050, NULL, '2022-07-26 10:02:21'); + +-- ---------------------------- +-- Table structure for sys_role_post +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_post`; +CREATE TABLE `sys_role_post` ( + `RoleId` bigint(20) NOT NULL, + `DeptId` bigint(20) NOT NULL +) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = FIXED; + +-- ---------------------------- +-- Records of sys_role_post +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_tasks +-- ---------------------------- +DROP TABLE IF EXISTS `sys_tasks`; +CREATE TABLE `sys_tasks` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `Name` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `JobGroup` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `Cron` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `AssemblyName` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `ClassName` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `Remark` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `RunTimes` int(11) NOT NULL COMMENT '执行次数', + `BeginTime` datetime(0) NOT NULL, + `EndTime` datetime(0) NOT NULL, + `TriggerType` int(11) NOT NULL COMMENT '触发器类型(0、simple 1、cron)', + `IntervalSecond` int(11) NOT NULL COMMENT '执行间隔时间(单位:秒)', + `IsStart` bit(1) NOT NULL, + `JobParams` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '最后更新时间', + `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人编码', + `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人编码', + `lastRunTime` datetime(0) NULL DEFAULT NULL COMMENT '最后执行时间', + `apiUrl` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'api执行地址', + `taskType` int(11) NULL DEFAULT 1 COMMENT '任务类型1程序集任务 2网络请求', + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_tasks +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_tasks_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_tasks_log`; +CREATE TABLE `sys_tasks_log` ( + `jobLogId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务日志ID', + `jobId` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务id', + `jobName` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务名称', + `jobGroup` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务组名', + `jobMessage` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '日志信息', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '执行状态(0正常 1失败)', + `exception` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '异常信息', + `createTime` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `invokeTarget` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '调用目标', + `elapsed` double(10, 0) NULL DEFAULT NULL COMMENT '作业用时', + PRIMARY KEY (`jobLogId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_tasks_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` ( + `userId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `deptId` bigint(20) NULL DEFAULT NULL COMMENT '部门ID', + `userName` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户账号', + `nickName` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称', + `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户邮箱', + `phonenumber` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '手机号码', + `sex` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)', + `avatar` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像地址', + `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '帐号状态(0正常 1停用)', + `delFlag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `loginIP` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '最后登录IP', + `loginDate` datetime(0) NULL DEFAULT NULL COMMENT '最后登录时间', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`userId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO `sys_user` VALUES (1, 0, 'admin', '管理员', '', '', '0', 'http://localhost:8777/avatar/20220929/AD2AEAB8A3F37142.jpg', 'e10adc3949ba59abbe56e057f20f883e', '0', '0', '120.84.12.229', '2022-10-08 21:26:06', 'admin', '2020-11-26 11:52:59', 'admin', '2021-08-03 10:11:24', '管理员', NULL); +INSERT INTO `sys_user` VALUES (2, 0, 'zr', 'zr', NULL, NULL, '0', '', 'E10ADC3949BA59ABBE56E057F20F883E', '0', '0', '120.237.13.90', '2022-10-08 11:53:47', 'admin', '2021-07-05 17:29:13', 'admin', '2021-08-02 16:53:04', '普通用户', NULL); +INSERT INTO `sys_user` VALUES (3, 100, 'editor', '编辑人员', NULL, NULL, '2', '', 'E10ADC3949BA59ABBE56E057F20F883E', '0', '0', '127.0.0.1', '2021-08-19 09:27:46', 'admin', '2021-08-18 18:24:53', '', NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_user_post +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_post`; +CREATE TABLE `sys_user_post` ( + `UserId` bigint(20) NOT NULL, + `PostId` bigint(20) NOT NULL +) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = FIXED; + +-- ---------------------------- +-- Records of sys_user_post +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_role`; +CREATE TABLE `sys_user_role` ( + `user_id` bigint(20) NOT NULL COMMENT '用户ID', + `role_id` bigint(20) NOT NULL COMMENT '角色ID', + PRIMARY KEY (`user_id`, `role_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_user_role +-- ---------------------------- +INSERT INTO `sys_user_role` VALUES (1, 1); +INSERT INTO `sys_user_role` VALUES (2, 2); +INSERT INTO `sys_user_role` VALUES (3, 3); +INSERT INTO `sys_user_role` VALUES (101, 2); +INSERT INTO `sys_user_role` VALUES (109, 116); +INSERT INTO `sys_user_role` VALUES (110, 2); + +-- ---------------------------- +-- Table structure for tb_chat_apply +-- ---------------------------- +DROP TABLE IF EXISTS `tb_chat_apply`; +CREATE TABLE `tb_chat_apply` ( + `sender_guid` bigint(20) NOT NULL COMMENT '发起人id', + `receiver_guid` bigint(20) NOT NULL COMMENT '接收人id', + `postscript` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附言', + `reply` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '回复', + `isAgree` bit(1) NULL DEFAULT NULL COMMENT '是否同意', + `Create_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `Create_time` datetime(0) NULL DEFAULT NULL, + `Update_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `Update_time` datetime(0) NULL DEFAULT NULL, + `IsDelete` bit(1) NULL DEFAULT NULL, + `isGroupApply` bit(1) NULL DEFAULT NULL COMMENT '是否群申请', + `isRead` bit(1) NOT NULL COMMENT '是否已读' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '申请表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_chat_apply +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tb_chat_friends +-- ---------------------------- +DROP TABLE IF EXISTS `tb_chat_friends`; +CREATE TABLE `tb_chat_friends` ( + `uesr_guid` bigint(20) NOT NULL COMMENT '用户guid', + `friends_guid` bigint(20) NOT NULL COMMENT '好友guid', + `friends_note` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `Create_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `Create_time` datetime(0) NULL DEFAULT NULL, + `Update_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `Update_time` datetime(0) NULL DEFAULT NULL, + `IsDelete` bit(1) NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '好友表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_chat_friends +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tb_chat_group +-- ---------------------------- +DROP TABLE IF EXISTS `tb_chat_group`; +CREATE TABLE `tb_chat_group` ( + `group_id` int(11) NOT NULL AUTO_INCREMENT, + `group_guid` bigint(20) NOT NULL, + `group_name` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '群名称', + `group_img` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '群头像', + `Create_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `Create_time` datetime(0) NULL DEFAULT NULL, + `Update_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `Update_time` datetime(0) NULL DEFAULT NULL, + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`group_id`, `group_guid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '群聊表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_chat_group +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tb_chat_group_user +-- ---------------------------- +DROP TABLE IF EXISTS `tb_chat_group_user`; +CREATE TABLE `tb_chat_group_user` ( + `group_guid` bigint(20) NOT NULL COMMENT '群guid(外键)', + `user_guid` bigint(20) NOT NULL COMMENT '用户guid(外键)', + `IsRead` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已读', + `Create_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `Create_time` datetime(0) NULL DEFAULT NULL, + `Update_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `Update_time` datetime(0) NULL DEFAULT NULL, + `IsDelete` bit(1) NULL DEFAULT NULL, + `isgroup_manager` bit(1) NOT NULL COMMENT '是否为群主' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '群聊用户表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_chat_group_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tb_chat_log +-- ---------------------------- +DROP TABLE IF EXISTS `tb_chat_log`; +CREATE TABLE `tb_chat_log` ( + `chat_log_id` int(11) NOT NULL AUTO_INCREMENT, + `chat_log_guid` bigint(20) NOT NULL, + `chat_log_type` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聊天记录类型(1:私聊,2:群聊)', + `sender_guid` bigint(20) NOT NULL COMMENT '发送人guid(外键)', + `receiver_guid` bigint(20) NOT NULL COMMENT '接收人guid(外键)', + `chat_log_send_time` datetime(0) NOT NULL COMMENT '发送时间', + `chat_log_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '内容', + `chat_log_name` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `Create_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `Create_time` datetime(0) NULL DEFAULT NULL, + `Update_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `Update_time` datetime(0) NULL DEFAULT NULL, + `IsDelete` bit(1) NULL DEFAULT NULL, + `isRead` bit(1) NOT NULL COMMENT '是否已读', + PRIMARY KEY (`chat_log_id`, `chat_log_guid`) USING BTREE, + INDEX `"sender_guid"`(`sender_guid`) USING BTREE, + INDEX `"reveiver_guid"`(`receiver_guid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1614 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '聊天记录表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_chat_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tb_chat_user +-- ---------------------------- +DROP TABLE IF EXISTS `tb_chat_user`; +CREATE TABLE `tb_chat_user` ( + `chat_user_id` int(11) NOT NULL AUTO_INCREMENT, + `chat_user_guid` bigint(20) NOT NULL, + `chat_user_name` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名', + `Password` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `chat_user_nickname` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '昵称', + `chat_user_sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别(1:男,2:女)', + `chat_user_age` int(11) NULL DEFAULT NULL COMMENT '年龄', + `chat_user_img` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户头像', + `chat_user_status` int(11) NOT NULL COMMENT '登录状态(1,在线 | 0,离线)', + `chat_user_phone` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电话号码', + `chat_user_email` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱', + `Create_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `Create_time` datetime(0) NULL DEFAULT NULL, + `Update_by` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `Update_time` datetime(0) NULL DEFAULT NULL, + `IsDelete` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`chat_user_id`, `chat_user_guid`) USING BTREE, + INDEX `”chat_user_guid“`(`chat_user_guid`) USING BTREE, + INDEX `“chat_user_name”`(`chat_user_name`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 39 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '聊天室用户表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_chat_user +-- ---------------------------- + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/ARW-net/document/excel/student/学生列表0720205233.xlsx b/ARW-net/document/excel/student/学生列表0720205233.xlsx new file mode 100644 index 0000000..073a4b5 Binary files /dev/null and b/ARW-net/document/excel/student/学生列表0720205233.xlsx differ diff --git a/ARW-net/document/excel/student/学生列表0721140932.xlsx b/ARW-net/document/excel/student/学生列表0721140932.xlsx new file mode 100644 index 0000000..cd7e388 Binary files /dev/null and b/ARW-net/document/excel/student/学生列表0721140932.xlsx differ diff --git a/ARW-net/document/excel/student/学生列表模板 (4).xlsx b/ARW-net/document/excel/student/学生列表模板 (4).xlsx new file mode 100644 index 0000000..953c46a Binary files /dev/null and b/ARW-net/document/excel/student/学生列表模板 (4).xlsx differ diff --git a/ARW-net/document/image/1.txt b/ARW-net/document/image/1.txt new file mode 100644 index 0000000..e69de29 diff --git a/ARW-net/document/image/emjoi表情包.gif b/ARW-net/document/image/emjoi表情包.gif new file mode 100644 index 0000000..172d4de Binary files /dev/null and b/ARW-net/document/image/emjoi表情包.gif differ diff --git a/ARW-net/document/image/上传图片.gif b/ARW-net/document/image/上传图片.gif new file mode 100644 index 0000000..7524203 Binary files /dev/null and b/ARW-net/document/image/上传图片.gif differ diff --git a/ARW-net/document/image/个人中心.jpg b/ARW-net/document/image/个人中心.jpg new file mode 100644 index 0000000..a78580b Binary files /dev/null and b/ARW-net/document/image/个人中心.jpg differ diff --git a/ARW-net/document/image/后台账户管理.jpg b/ARW-net/document/image/后台账户管理.jpg new file mode 100644 index 0000000..a6d0d11 Binary files /dev/null and b/ARW-net/document/image/后台账户管理.jpg differ diff --git a/ARW-net/document/image/后台首页.jpg b/ARW-net/document/image/后台首页.jpg new file mode 100644 index 0000000..6443b2b Binary files /dev/null and b/ARW-net/document/image/后台首页.jpg differ diff --git a/ARW-net/document/image/好友申请.jpg b/ARW-net/document/image/好友申请.jpg new file mode 100644 index 0000000..0f9c1d7 Binary files /dev/null and b/ARW-net/document/image/好友申请.jpg differ diff --git a/ARW-net/document/image/好友简介.jpg b/ARW-net/document/image/好友简介.jpg new file mode 100644 index 0000000..6f30dbb Binary files /dev/null and b/ARW-net/document/image/好友简介.jpg differ diff --git a/ARW-net/document/image/实时聊天演示.gif b/ARW-net/document/image/实时聊天演示.gif new file mode 100644 index 0000000..53d05e4 Binary files /dev/null and b/ARW-net/document/image/实时聊天演示.gif differ diff --git a/ARW-net/document/image/注册流程.gif b/ARW-net/document/image/注册流程.gif new file mode 100644 index 0000000..8df4ba0 Binary files /dev/null and b/ARW-net/document/image/注册流程.gif differ diff --git a/ARW-net/document/image/群聊演示.gif b/ARW-net/document/image/群聊演示.gif new file mode 100644 index 0000000..12cad09 Binary files /dev/null and b/ARW-net/document/image/群聊演示.gif differ diff --git a/ARW-net/document/image/聊天截图.jpg b/ARW-net/document/image/聊天截图.jpg new file mode 100644 index 0000000..247b9f6 Binary files /dev/null and b/ARW-net/document/image/聊天截图.jpg differ diff --git a/ARW-net/document/image/聊天首页.jpg b/ARW-net/document/image/聊天首页.jpg new file mode 100644 index 0000000..94097f8 Binary files /dev/null and b/ARW-net/document/image/聊天首页.jpg differ diff --git a/ARW-net/document/zradmin.ini b/ARW-net/document/zradmin.ini new file mode 100644 index 0000000..1d8e00f --- /dev/null +++ b/ARW-net/document/zradmin.ini @@ -0,0 +1,38 @@ +server { + #修改要监听的端口 + listen 8080; + #修改要绑定的域名或IP地址 + server_name localhost; + + # charset koi8-r; + access_log logs/logs.access.log main; + + # 后端接口 生产环境 + location /prod-api/ { + proxy_pass http://localhost:8888/; + + # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + # 如果请求被负载均衡的服务器返回类似500这样的,将继续请求下一台应用服务器,默认 对post,lock,patch的请求不进行重试,如果要设置在后面添加 non_idemponent + # proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; + } + + # vue项目配置 + location / { + #将xxxxx路径改成你的发布路径 + root html/zradmin_vue; + index index.html; + try_files $uri $uri/ /index.html; + } + + error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } +} \ No newline at end of file diff --git a/ARW-net/document/登录界面.jpg b/ARW-net/document/登录界面.jpg new file mode 100644 index 0000000..797abe5 Binary files /dev/null and b/ARW-net/document/登录界面.jpg differ diff --git a/ARW-net/startup.bat b/ARW-net/startup.bat new file mode 100644 index 0000000..995577c --- /dev/null +++ b/ARW-net/startup.bat @@ -0,0 +1 @@ +dotnet watch --project ZR.Admin.WebApi run \ No newline at end of file diff --git a/ARW-vue-main/.editorconfig b/ARW-vue-main/.editorconfig new file mode 100644 index 0000000..7034f9b --- /dev/null +++ b/ARW-vue-main/.editorconfig @@ -0,0 +1,22 @@ +# 告诉EditorConfig插件,这是根文件,不用继续往上查找 +root = true + +# 匹配全部文件 +[*] +# 设置字符集 +charset = utf-8 +# 缩进风格,可选space、tab +indent_style = space +# 缩进的空格数 +indent_size = 2 +# 结尾换行符,可选lf、cr、crlf +end_of_line = lf +# 在文件结尾插入新行 +insert_final_newline = true +# 删除一行中的前后空格 +trim_trailing_whitespace = true + +# 匹配md结尾的文件 +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/ARW-vue-main/.env b/ARW-vue-main/.env new file mode 100644 index 0000000..f92fd11 --- /dev/null +++ b/ARW-vue-main/.env @@ -0,0 +1,3 @@ + +# 页面标题 +VITE_APP_TITLE = 'Aerwen Chat' \ No newline at end of file diff --git a/ARW-vue-main/.env.development b/ARW-vue-main/.env.development new file mode 100644 index 0000000..7346fda --- /dev/null +++ b/ARW-vue-main/.env.development @@ -0,0 +1,15 @@ +# 开发环境配置 +ENV = 'development' + + +# 开发环境 +VITE_APP_BASE_API = '/dev-api' + +# 路由前缀 +VITE_APP_ROUTER_PREFIX = '/' + +# 默认上传地址 +VITE_APP_UPLOAD_URL = '/Common/UploadFile' + +#socket API +VITE_APP_SOCKET_API = '/msghub' \ No newline at end of file diff --git a/ARW-vue-main/.env.production b/ARW-vue-main/.env.production new file mode 100644 index 0000000..069cc48 --- /dev/null +++ b/ARW-vue-main/.env.production @@ -0,0 +1,15 @@ +# 生产环境配置 +ENV = 'production' + + +# 生产环境 +VITE_APP_BASE_API = '/prod-api' + +# 路由前缀 +VITE_APP_ROUTER_PREFIX = '/' + +# 默认上传地址 +VITE_APP_UPLOAD_URL = '/Common/UploadFile' + +#socket API +VITE_APP_SOCKET_API = '/msghub' \ No newline at end of file diff --git a/ARW-vue-main/.env.staging b/ARW-vue-main/.env.staging new file mode 100644 index 0000000..62f968e --- /dev/null +++ b/ARW-vue-main/.env.staging @@ -0,0 +1,18 @@ +# 测试环境配置 +ENV = 'staging' + + +# 测试环境 +VITE_APP_BASE_API = '/stage-api' + +# 路由前缀 +VITE_APP_ROUTER_PREFIX = '/' + +# 默认上传地址 +VITE_APP_UPLOAD_URL = '/Common/UploadFile' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS = gzip + +#socket API +VITE_APP_SOCKET_API = '/msghub' \ No newline at end of file diff --git a/ARW-vue-main/.eslintignore b/ARW-vue-main/.eslintignore new file mode 100644 index 0000000..cafab33 --- /dev/null +++ b/ARW-vue-main/.eslintignore @@ -0,0 +1,14 @@ +# 忽略build目录下类型为js的文件的语法检查 +build/*.js +# 忽略src/assets目录下文件的语法检查 +src/assets +# 忽略public目录下文件的语法检查 +public +# 忽略当前目录下为js的文件的语法检查 +# *.js +# 忽略当前目录下为vue的文件的语法检查 +# *.vue +/node_modules/ +/vite/ +.eslintrc.js +.prettierrc.js \ No newline at end of file diff --git a/ARW-vue-main/.eslintrc.js b/ARW-vue-main/.eslintrc.js new file mode 100644 index 0000000..82bbdee --- /dev/null +++ b/ARW-vue-main/.eslintrc.js @@ -0,0 +1,199 @@ +// ESlint 检查配置 +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/ARW-vue-main/.gitignore b/ARW-vue-main/.gitignore new file mode 100644 index 0000000..308820b --- /dev/null +++ b/ARW-vue-main/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +yarn.lock +/deploy.js diff --git a/ARW-vue-main/.jsbeautifyrc b/ARW-vue-main/.jsbeautifyrc new file mode 100644 index 0000000..d79fae6 --- /dev/null +++ b/ARW-vue-main/.jsbeautifyrc @@ -0,0 +1,12 @@ +{ + "brace_style": "none,preserve-inline", + "indent_size": 2, + "indent_char": " ", + "jslint_happy": true, + "unformatted": [ + "" + ], + "css": { + "indent_size": 2 + } +} \ No newline at end of file diff --git a/ARW-vue-main/.prettierrc.js b/ARW-vue-main/.prettierrc.js new file mode 100644 index 0000000..fae9475 --- /dev/null +++ b/ARW-vue-main/.prettierrc.js @@ -0,0 +1,38 @@ +module.exports = { + // 超过最大值换行 + printWidth: 148, + // 使用 2 个空格缩进 + tabWidth: 2, + // 不使用缩进符,而使用空格 + useTabs: false, + // 行尾不需要有分号 + semi: false, + // 使用单引号 + singleQuote: true, + // 对象的 key 仅在必要时用引号 + quoteProps: 'as-needed', + // jsx 不使用单引号,而使用双引号 + jsxSingleQuote: false, + // 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"",默认none + trailingComma: 'none', + // 在对象,数组括号与文字之间加空格 "{ foo: bar }" + bracketSpacing: true, + // jsx 标签的反尖括号需要换行 + jsxBracketSameLine: true, + bracketSameLine: true, + // 箭头函数,always只有一个参数的时候,也需要括号,'avoid'箭头函数只有一个参数的时候可以忽略括号 + arrowParens: 'always', + // 每个文件格式化的范围是文件的全部内容 + rangeStart: 0, + rangeEnd: Infinity, + // 不需要写文件开头的 @prettier + requirePragma: false, + // 不需要自动在文件开头插入 @prettier + insertPragma: false, + // 使用默认的折行标准 + proseWrap: 'preserve', + // 根据显示样式决定 html 要不要折行 + htmlWhitespaceSensitivity: 'css', + // 换行符使用 lf 结尾是 可选值"" + endOfLine: 'auto' +} diff --git a/ARW-vue-main/.vs/VSWorkspaceState.json b/ARW-vue-main/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..7506b4f --- /dev/null +++ b/ARW-vue-main/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\src", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/ARW-vue-main/.vs/ZRAdmin-vue-main/FileContentIndex/b5a93f46-3a2f-41fb-b555-f50a2c591acd.vsidx b/ARW-vue-main/.vs/ZRAdmin-vue-main/FileContentIndex/b5a93f46-3a2f-41fb-b555-f50a2c591acd.vsidx new file mode 100644 index 0000000..b0811ff Binary files /dev/null and b/ARW-vue-main/.vs/ZRAdmin-vue-main/FileContentIndex/b5a93f46-3a2f-41fb-b555-f50a2c591acd.vsidx differ diff --git a/ARW-vue-main/.vs/ZRAdmin-vue-main/FileContentIndex/read.lock b/ARW-vue-main/.vs/ZRAdmin-vue-main/FileContentIndex/read.lock new file mode 100644 index 0000000..e69de29 diff --git a/ARW-vue-main/.vs/slnx.sqlite b/ARW-vue-main/.vs/slnx.sqlite new file mode 100644 index 0000000..8e50ab1 Binary files /dev/null and b/ARW-vue-main/.vs/slnx.sqlite differ diff --git a/ARW-vue-main/.vscode/settings.json b/ARW-vue-main/.vscode/settings.json new file mode 100644 index 0000000..e8de2d6 --- /dev/null +++ b/ARW-vue-main/.vscode/settings.json @@ -0,0 +1,64 @@ +{ + "editor.fontSize": 15, + "editor.insertSpaces": false, + "editor.bracketPairColorization.enabled": true, + "editor.formatOnPaste": false, + "editor.formatOnType": false, + // 配置eslint适用于vue代码 + "eslint.validate": [ + "javascript", + "typescript", + "vue" + ], + "[vue]": { + "editor.defaultFormatter": "Vue.volar" + }, + "[scss]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[ts]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[js]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + // 保存时 prettier 自动格式化 + "editor.formatOnSave": false, + // 保存时自动启用 eslint --fix 自动修复 + "editor.codeActionsOnSave": { + "source.fixAll": true, + "eslint.autoFixOnSave": true, + }, + "eslint.options": { + "overrideConfig": { + "env": { + "browser": true, + "es6": true + }, + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "ecmaFeatures": { + "jsx": false + } + }, + "rules": { + "no-debugger": "off" + } + } + }, + "i18n-ally.displayLanguage": "zh-cn", + "i18n-ally.enabledParsers": ["json", "js"], + "i18n-ally.localesPaths": [ + "src/i18n/lang", + "src/i18n/pages/login", + "src/i18n/pages/menu", + ], + "i18n-ally.extract.parsers.html": { + "attributes": ["text", "title", "alt", "placeholder", "label", "aria-label"], + "ignoredTags": ["script", "style"], + "vBind": true, + "inlineText": true + }, + "i18n-ally.keystyle": "nested", +} \ No newline at end of file diff --git a/ARW-vue-main/LICENSE b/ARW-vue-main/LICENSE new file mode 100644 index 0000000..c9d9dc2 --- /dev/null +++ b/ARW-vue-main/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 791736813@qq.com zr + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ARW-vue-main/README.md b/ARW-vue-main/README.md new file mode 100644 index 0000000..9929c20 --- /dev/null +++ b/ARW-vue-main/README.md @@ -0,0 +1,222 @@ +

Vue后台开发流程

+ + + +## 🎉优势 + +1. 前台系统不用编写登录、授权、认证模块;只负责编写业务模块即可 +2. 后台系统无需任何二次开发,直接发布即可使用 +3. 前台与后台系统分离,分别为不同的系统(域名可独立) +4. 全局异常统一处理 +5. 自定义的代码生成功能 +6. 国际化 + + + +## 🍁前端运行 + +```bash +# 进入项目vue目录 +cd ARW-vue-main + +# 安装依赖 +npm i + +# 启动服务 +npm run dev + +# 前端访问地址 http://localhost:8887 +``` + +确保**后端**的服务已启动: + +![](https://drive.kongwu.top/image/image/1dcb6d8203fddda558d50486225ae051.jpg) + + + +**账号:** + +- 管理员:admin +- 密 码:123456 + + + +------ + +## ✨ 开发流程 + +点击这里查看 (文档)[http://www.izhaorui.cn/doc/frontend.html#%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83] + + + +### 1、新增 view + +> 在 `src/views/business` 文件下 创建对应的文件夹, +> +> 一般性一个路由对应一个文件, +> +> 各个功能模块维护自己的 utils 或 components 组件。 + +**Tip:可以复制粘贴,修改字段,删除不需要的字段或按钮即可** + +示例:添加`学校管理(一级目录)`下的 `班级管理(二级菜单)` + +![](https://drive.kongwu.top/image/image/6ed2c509c2d404a9446750a3d7a04734.jpg) + + + +```json +# 具体功能可以参考 模板页面 `class/index(简易版)` | `student/index(具体功能版)` + +// 搜索框 +// 功能按钮(添加、删除) +// 表格渲染 +// 弹窗 + +# 修改 api 接口位置 +import { xxxList, delxxx } from '@/api/business/xxx模块/xxx.js' +``` + + + +------ + + + +### 2、弹窗组件 + +![](https://drive.kongwu.top/image/image/c004bd21f769a25a7a1fae07ed683e3c.jpg) + +* 添加 +* 修改 +* 详情 + +```js +# 修改 api 接口位置 +import { xxxList, delxxx } from '@/api/business/xxx模块/xxx.js' +``` + + + +> 报表主要几个核心功能: +> +> 输入框 +> +> 下拉框 +> +> 字典选项 +> +> 标签 +> +> json +> +> 图片 +> +> 富文本 +> +> 弹窗 + +```json +// 具体操作请看模板 +``` + + + +------ + + + +### 3、新增 api + +在 `src/api/business `文件夹下创建本模块对应的 api 服务。 + +![image-20220727105124808](https://drive.kongwu.top/image/image/70787392f978e2fd24662cb6869f3f88.jpg) + +```js +# 其中一个请求示例,修改 url请求地址 和 method请求方法 + +// 查询列表 +export function classList(query) { + return request({ + url: '/business/class/GetClassList', + method: 'get', + params: query + }) +} +``` + + + +------ + + + +### 4、添加菜单 + +打开 `系统管理` 的 `菜单管理` **点击新增按钮** + +![](http://119.23.54.43/oss/test/20220727/F8A6A9BFD98036BA.jpg) + + + +![](http://119.23.54.43/oss/test/20220727/E0E09E81BBC35E03.jpg) + + + +![](http://119.23.54.43/oss/test/20220727/4FFC6A70AB40C4B9.jpg) + +``` +# 因为需要做 `权限管理` 所有使用的是权限字符 +``` + +![](http://119.23.54.43/oss/test/20220727/5D9EA6F2808A960E.jpg) + +``` +# 使用了权限字符,就要给对应的按钮,添加权限字符(与后端沟通,或者看任务表) +``` + +![](http://119.23.54.43/oss/test/20220727/3C5DF2089ECDC331.jpg) + +![](http://119.23.54.43/oss/test/20220727/B8493ECDF4A79630.jpg) + + + + + +------ + + + +### 5、查看接口数据 + +[Swagger官网教程](https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/web-api-help-pages-using-swagger?view=aspnetcore-5.0) + + + +![](https://drive.kongwu.top/image/image/9e32cc653ce2d3dc782ab293e4d1b38b.jpg) + +![](https://drive.kongwu.top/image/image/3e1374276316e1a284458320e017e08c.jpg) + +![](http://119.23.54.43/oss/test/20220727/BAE6BA89F9B2BBAB.jpg) + +![](http://119.23.54.43/oss/test/20220727/A1FADA3B87909DE1.jpg) + +![](http://119.23.54.43/oss/test/20220727/521DA421B69E4C20.jpg) + + + + + + + +## ⚙ 参数修改 + +项目标题: 在 `.env` 中的 `VITE_APP_TITLE`。 + +主题颜色:在 `src` 中的 `settings.js` 里面有后台的主题参数。 + +或者直接在后台修改~ + +![](http://119.23.54.43:8888/uploads/20220729/25F435E16122D654.jpg) + +![](http://119.23.54.43/oss/20220729/8782D5526D7419CC.jpg) diff --git a/ARW-vue-main/bat/build.bat b/ARW-vue-main/bat/build.bat new file mode 100644 index 0000000..ecbb454 --- /dev/null +++ b/ARW-vue-main/bat/build.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] Weḅdistļ +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn build:prod + +pause \ No newline at end of file diff --git a/ARW-vue-main/bat/package.bat b/ARW-vue-main/bat/package.bat new file mode 100644 index 0000000..965883a --- /dev/null +++ b/ARW-vue-main/bat/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] װWeḅnode_modulesļ +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn --registry=https://registry.npm.taobao.org + +pause \ No newline at end of file diff --git a/ARW-vue-main/bat/run-web.bat b/ARW-vue-main/bat/run-web.bat new file mode 100644 index 0000000..d2fe397 --- /dev/null +++ b/ARW-vue-main/bat/run-web.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] ʹ Vite Web ̡ +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn dev + +pause \ No newline at end of file diff --git a/ARW-vue-main/html/ie.html b/ARW-vue-main/html/ie.html new file mode 100644 index 0000000..052ffcd --- /dev/null +++ b/ARW-vue-main/html/ie.html @@ -0,0 +1,46 @@ + + + + + + 请升级您的浏览器 + + + + + + +

请升级您的浏览器,以便我们更好的为您提供服务!

+

您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。

+
+

请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束

+

自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明

+
+

您可以选择更先进的浏览器

+

推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。

+ +
+ + \ No newline at end of file diff --git a/ARW-vue-main/index.html b/ARW-vue-main/index.html new file mode 100644 index 0000000..6a3403d --- /dev/null +++ b/ARW-vue-main/index.html @@ -0,0 +1,139 @@ + + + + + + + + + + Aerwen Chat + + + + + +
+
+
+ +
+
Loading...
+
+
+ + + + \ No newline at end of file diff --git a/ARW-vue-main/jsconfig.json b/ARW-vue-main/jsconfig.json new file mode 100644 index 0000000..86b1741 --- /dev/null +++ b/ARW-vue-main/jsconfig.json @@ -0,0 +1,11 @@ +/* 主要作用是vscode导入使用别名时可以自动化提示文件路径 */ +{ + "compilerOptions": { + "experimentalDecorators": true, + "baseUrl": "./", + "paths": { + "@/*": ["src/*"] + } + }, + "exclude": ["node_modules", "dist", ".vscode"] +} \ No newline at end of file diff --git a/ARW-vue-main/package.json b/ARW-vue-main/package.json new file mode 100644 index 0000000..7dfa65c --- /dev/null +++ b/ARW-vue-main/package.json @@ -0,0 +1,55 @@ +{ + "name": "zr", + "version": "3.8.2", + "description": "管理系统", + "author": "ZR", + "license": "MIT", + "scripts": { + "dev": "vite", + "build:prod": "vite build", + "build:stage": "vite build --mode staging", + "preview": "vite preview" + }, + "repository": { + "type": "git", + "url": "https://gitee.com/izory/ZrAdminNetCore" + }, + "dependencies": { + "@element-plus/icons-vue": "^0.2.7", + "@microsoft/signalr": "^6.0.5", + "@vueuse/core": "^8.5.0", + "@wangeditor/editor": "^5.1.1", + "@wangeditor/editor-for-vue": "^5.1.11", + "axios": "^0.27.2", + "countup.js": "^2.1.0", + "default-passive-events": "^2.0.0", + "echarts": "5.2.2", + "echarts-wordcloud": "^2.0.0", + "element-plus": "^2.2.6", + "file-saver": "2.0.5", + "fuse.js": "6.4.6", + "highlight.js": "^11.5.1", + "js-cookie": "3.0.1", + "jsencrypt": "3.2.1", + "md-editor-v3": "^1.11.11", + "nprogress": "0.2.0", + "pinia": "^2.0.14", + "sortablejs": "^1.15.0", + "vue": "^3.2.36", + "vue-clipboard3": "^2.0.0", + "vue-cropper": "1.0.2", + "vue-i18n": "^9.1.10", + "vue-router": "^4.0.15", + "vue3-seamless-scroll": "^1.2.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^2.3.1", + "@vue/compiler-sfc": "^3.2.33", + "sass": "1.45.0", + "unplugin-auto-import": "0.5.3", + "vite": "^2.9.5", + "vite-plugin-compression": "0.3.6", + "vite-plugin-svg-icons": "1.0.5", + "vite-plugin-vue-setup-extend": "^0.4.0" + } +} diff --git a/ARW-vue-main/public/favicon.ico b/ARW-vue-main/public/favicon.ico new file mode 100644 index 0000000..fcb6999 Binary files /dev/null and b/ARW-vue-main/public/favicon.ico differ diff --git a/ARW-vue-main/src/App.vue b/ARW-vue-main/src/App.vue new file mode 100644 index 0000000..bc3acbe --- /dev/null +++ b/ARW-vue-main/src/App.vue @@ -0,0 +1,55 @@ + + diff --git a/ARW-vue-main/src/api/business/chatUser.js b/ARW-vue-main/src/api/business/chatUser.js new file mode 100644 index 0000000..1ecf349 --- /dev/null +++ b/ARW-vue-main/src/api/business/chatUser.js @@ -0,0 +1,21 @@ +import request from '@/utils/request' + +// 查询列表 +export function getChatUserList(query) { + return request({ + url: '/business/chatUser/getChatUserList', + method: 'get', + params: query + }) +} + +// 修改 +export function updateChatUserStatus(data) { + return request({ + url: '/business/chatUser/updateChatUserStatus', + method: 'put', + data: data + }) +} + + diff --git a/ARW-vue-main/src/api/business/product/productType.js b/ARW-vue-main/src/api/business/product/productType.js new file mode 100644 index 0000000..dec769d --- /dev/null +++ b/ARW-vue-main/src/api/business/product/productType.js @@ -0,0 +1,37 @@ +import request from '@/utils/request' + +// 查询树列表 +export function productTypeTreeList(query) { + return request({ + url: '/business/productType/getProductTypeTreeList', + method: 'get', + params: query + }) +} + +// 新增 +export function addProductType(data) { + return request({ + url: '/business/productType/addProductType', + method: 'post', + data: data, + }) +} + +// 修改 +export function updateProductType(data) { + return request({ + url: '/business/productType/updateProductType', + method: 'put', + data: data + }) +} + +// 删除 +export function delProductType(ids) { + return request({ + url: '/business/productType/'+ ids, + method: 'delete' + }) +} + diff --git a/ARW-vue-main/src/api/business/school/class.js b/ARW-vue-main/src/api/business/school/class.js new file mode 100644 index 0000000..0a01ab0 --- /dev/null +++ b/ARW-vue-main/src/api/business/school/class.js @@ -0,0 +1,37 @@ +import request from '@/utils/request' + +// 查询列表 +export function classList(query) { + return request({ + url: '/business/class/GetClassList', + method: 'get', + params: query + }) +} + +// 新增 +export function addClass(data) { + return request({ + url: '/business/class/AddClass', + method: 'post', + data: data, + }) +} + +// 修改 +export function updateClass(data) { + return request({ + url: '/business/class/UpdateClass', + method: 'put', + data: data + }) +} + +// 删除 +export function delClass(ids) { + return request({ + url: '/business/class/'+ ids, + method: 'delete' + }) +} + diff --git a/ARW-vue-main/src/api/business/school/student.js b/ARW-vue-main/src/api/business/school/student.js new file mode 100644 index 0000000..38c96eb --- /dev/null +++ b/ARW-vue-main/src/api/business/school/student.js @@ -0,0 +1,54 @@ +import request from '@/utils/request' + +// 查询列表 +export function studentList(query) { + return request({ + url: '/business/student/GetStudentList', + method: 'get', + params: query + }) +} + +// 新增 +export function addStudent(data) { + return request({ + url: '/business/student/AddStudent', + method: 'post', + data: data, + }) +} + +// 修改 +export function updateStudent(data) { + return request({ + url: '/business/student/UpdateStudent', + method: 'put', + data: data + }) +} + +// 删除 +export function delStudent(ids) { + return request({ + url: '/business/student/'+ ids, + method: 'delete' + }) +} + +// 查询班级列表 +export function getClassList(query) { + return request({ + url: '/business/student/getClassList', + method: 'get', + params: query + }) +} + +// 导出学生目录 +export function exportStudent(query) { + return request({ + url: 'business/student/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ARW-vue-main/src/api/common.js b/ARW-vue-main/src/api/common.js new file mode 100644 index 0000000..c57228f --- /dev/null +++ b/ARW-vue-main/src/api/common.js @@ -0,0 +1,23 @@ +import request from '@/utils/request' + +export function upload(data) { + return request({ + url: '/common/UploadFile', + method: 'POST', + data: data, + headers: { "Content-Type": "multipart/form-data" }, + }) +} + +/** + * 发送邮件 + * @param {*} data + * @returns + */ +export function sendEmail(data) { + return request({ + url: '/common/SendEmail', + method: 'POST', + data: data, + }) +} diff --git a/ARW-vue-main/src/api/monitor/cache.js b/ARW-vue-main/src/api/monitor/cache.js new file mode 100644 index 0000000..59d3505 --- /dev/null +++ b/ARW-vue-main/src/api/monitor/cache.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 查询缓存详细 +export function getCache() { + return request({ + url: '/monitor/cache', + method: 'get' + }) +} diff --git a/ARW-vue-main/src/api/monitor/job.js b/ARW-vue-main/src/api/monitor/job.js new file mode 100644 index 0000000..09107ff --- /dev/null +++ b/ARW-vue-main/src/api/monitor/job.js @@ -0,0 +1,115 @@ +import request from '@/utils/request' + +export function queryTasks(data) { + return request({ + url: '/system/tasks/list', + method: 'get', + data + }) +} + +export function getTasks(id) { + return request({ + url: '/system/tasks/get?id=' + id, + method: 'get' + }) +} + +/** + * + * 获取所有任务 + * @returns + */ +export function getAllTasks() { + return request({ + url: '/system/tasks/getAll', + method: 'get' + }) +} + +/** + * 创建任务 + * @param {*} data + * @returns + */ +export function createTasks(data) { + return request({ + url: '/system/tasks/create', + method: 'post', + data + }) +} + +/** + * 更新任务 + * @param {*} data + * @returns + */ +export function updateTasks(data) { + return request({ + url: '/system/tasks/update', + method: 'post', + data + }) +} + +/** + * 删除任务 + * @param {*} id + * @returns + */ +export function deleteTasks(id) { + return request({ + url: '/system/tasks/delete?id=' + id, + method: 'delete' + }) +} + +/** + * 启动任务 + * @param {*} id + * @returns + */ +export function startTasks(id) { + return request({ + url: '/system/tasks/start?id=' + id, + method: 'get' + }) +} + +/** + * 停止任务 + * @param {*} id + * @returns + */ +export function stopTasks(id) { + return request({ + url: '/system/tasks/stop?id=' + id, + method: 'get' + }) +} + +/** + * 运行一次 + * @param {*} id + * @returns + */ +export function runTasks(id) { + return request({ + url: '/system/tasks/run?id=' + id, + method: 'get' + }) +} +/** + * 导出 + * @returns + */ +export function exportTasks() { + return request({ + url: '/system/tasks/export', + method: 'get' + }) +} + + +export default { queryTasks, getTasks, getAllTasks, createTasks, updateTasks, deleteTasks, startTasks, stopTasks, runTasks, exportTasks } diff --git a/ARW-vue-main/src/api/monitor/jobLog.js b/ARW-vue-main/src/api/monitor/jobLog.js new file mode 100644 index 0000000..be1fffd --- /dev/null +++ b/ARW-vue-main/src/api/monitor/jobLog.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +// 查询调度日志列表 +export function listJobLog(query) { + return request({ + url: '/monitor/jobLog/list', + method: 'get', + params: query + }) +} + +// 删除调度日志 +export function delJobLog(jobLogId) { + return request({ + url: '/monitor/jobLog/' + jobLogId, + method: 'delete' + }) +} + +// 清空调度日志 +export function cleanJobLog() { + return request({ + url: '/monitor/jobLog/clean', + method: 'delete' + }) +} + +// 导出调度日志 +export function exportJobLog(query) { + return request({ + url: '/monitor/jobLog/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ARW-vue-main/src/api/monitor/logininfor.js b/ARW-vue-main/src/api/monitor/logininfor.js new file mode 100644 index 0000000..7ff412d --- /dev/null +++ b/ARW-vue-main/src/api/monitor/logininfor.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +// 查询登录日志列表 +export function list(query) { + return request({ + url: '/monitor/logininfor/list', + method: 'get', + params: query + }) +} + +// 删除登录日志 +export function delLogininfor(infoId) { + return request({ + url: '/monitor/logininfor/' + infoId, + method: 'delete' + }) +} + +// 清空登录日志 +export function cleanLogininfor() { + return request({ + url: '/monitor/logininfor/clean', + method: 'delete' + }) +} + +// 导出登录日志 +export function exportLogininfor(query) { + return request({ + url: '/monitor/logininfor/export', + method: 'get', + params: query + }) +} diff --git a/ARW-vue-main/src/api/monitor/online.js b/ARW-vue-main/src/api/monitor/online.js new file mode 100644 index 0000000..bd22137 --- /dev/null +++ b/ARW-vue-main/src/api/monitor/online.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询在线用户列表 +export function list(query) { + return request({ + url: '/monitor/online/list', + method: 'get', + params: query + }) +} + +// 强退用户 +export function forceLogout(tokenId) { + return request({ + url: '/monitor/online/' + tokenId, + method: 'delete' + }) +} diff --git a/ARW-vue-main/src/api/monitor/operlog.js b/ARW-vue-main/src/api/monitor/operlog.js new file mode 100644 index 0000000..07e27ab --- /dev/null +++ b/ARW-vue-main/src/api/monitor/operlog.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +// 查询操作日志列表 +export function list(query) { + return request({ + url: '/monitor/operlog/list', + method: 'get', + params: query + }) +} + +// 删除操作日志 +export function delOperlog(operId) { + return request({ + url: '/monitor/operlog/' + operId, + method: 'delete' + }) +} + +// 清空操作日志 +export function cleanOperlog() { + return request({ + url: '/monitor/operlog/clean', + method: 'delete' + }) +} + +// 导出操作日志 +export function exportOperlog(query) { + return request({ + url: '/monitor/operlog/export', + method: 'get', + params: query + }) +} diff --git a/ARW-vue-main/src/api/monitor/server.js b/ARW-vue-main/src/api/monitor/server.js new file mode 100644 index 0000000..bdcc62b --- /dev/null +++ b/ARW-vue-main/src/api/monitor/server.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 查询服务器详细 +export function getServer() { + return request({ + url: '/monitor/server', + method: 'get' + }) +} diff --git a/ARW-vue-main/src/api/system/commonlang.js b/ARW-vue-main/src/api/system/commonlang.js new file mode 100644 index 0000000..28b5b34 --- /dev/null +++ b/ARW-vue-main/src/api/system/commonlang.js @@ -0,0 +1,89 @@ +import request from '@/utils/request' + +/** + * 多语言配置分页查询 + * @param {查询条件} data + */ +export function listCommonLang(query) { + return request({ + url: 'system/CommonLang/list', + method: 'get', + params: query, + }) +} +/** + * 多语言配置查询 + * @param {查询条件} data + */ +export function listLangByLocale(locale) { + return request({ + url: 'system/CommonLang/list/' + locale, + method: 'get', + }) +} + +/** + * 新增多语言配置 + * @param data + */ +export function addCommonLang(data) { + return request({ + url: 'system/CommonLang', + method: 'post', + data: data, + }) +} + +/** + * 修改多语言配置 + * @param data + */ +export function updateCommonLang(data) { + return request({ + url: 'system/CommonLang', + method: 'PUT', + data: data, + }) +} + +/** + * 获取多语言配置详情 + * @param {Id} + */ +export function getCommonLang(id) { + return request({ + url: 'system/CommonLang/' + id, + method: 'get' + }) +} +/** + * 获取多语言配置详情 + * @param {key} + */ +export function getCommonLangByKey(key) { + return request({ + url: 'system/CommonLang/key/' + key, + method: 'get' + }) +} + + +/** + * 删除多语言配置 + * @param {主键} pid + */ +export function delCommonLang(pid) { + return request({ + url: 'system/CommonLang/' + pid, + method: 'delete' + }) +} + +// 导出多语言配置 +export function exportCommonLang(query) { + return request({ + url: 'system/CommonLang/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ARW-vue-main/src/api/system/config.js b/ARW-vue-main/src/api/system/config.js new file mode 100644 index 0000000..3633ba1 --- /dev/null +++ b/ARW-vue-main/src/api/system/config.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + +// 查询参数列表 +export function listConfig(query) { + return request({ + url: '/system/config/list', + method: 'get', + params: query + }) +} + +// 查询参数详细 +export function getConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'get' + }) +} + +// 根据参数键名查询参数值 +export function getConfigKey(configKey) { + return request({ + url: '/system/config/configKey/' + configKey, + method: 'get' + }) +} + +// 新增参数配置 +export function addConfig(data) { + return request({ + url: '/system/config', + method: 'post', + data: data + }) +} + +// 修改参数配置 +export function updateConfig(data) { + return request({ + url: '/system/config', + method: 'put', + data: data + }) +} + +// 删除参数配置 +export function delConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'delete' + }) +} + +// 刷新参数缓存 +export function refreshCache() { + return request({ + url: '/system/config/refreshCache', + method: 'delete' + }) +} + +// 导出参数 +// export function exportConfig(query) { +// return request({ +// url: '/system/config/export', +// method: 'get', +// params: query +// }) +// } diff --git a/ARW-vue-main/src/api/system/dept.js b/ARW-vue-main/src/api/system/dept.js new file mode 100644 index 0000000..2804676 --- /dev/null +++ b/ARW-vue-main/src/api/system/dept.js @@ -0,0 +1,68 @@ +import request from '@/utils/request' + +// 查询部门列表 +export function listDept(query) { + return request({ + url: '/system/dept/list', + method: 'get', + params: query + }) +} + +// 查询部门列表(排除节点) +export function listDeptExcludeChild(deptId) { + return request({ + url: '/system/dept/list/exclude/' + deptId, + method: 'get' + }) +} + +// 查询部门详细 +export function getDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'get' + }) +} + +// 查询部门下拉树结构 +export function treeselect() { + return request({ + url: '/system/dept/treeselect', + method: 'get' + }) +} + +// 根据角色ID查询部门树结构 +export function roleDeptTreeselect(roleId) { + return request({ + url: '/system/dept/roleDeptTreeselect/' + roleId, + method: 'get' + }) +} + +// 新增部门 +export function addDept(data) { + return request({ + url: '/system/dept', + method: 'post', + data: data + }) +} + +// 修改部门 +export function updateDept(data) { + return request({ + url: '/system/dept', + method: 'put', + data: data + }) +} + +// 删除部门 +export function delDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/ARW-vue-main/src/api/system/dict/data.js b/ARW-vue-main/src/api/system/dict/data.js new file mode 100644 index 0000000..0351dd6 --- /dev/null +++ b/ARW-vue-main/src/api/system/dict/data.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + +// 查询字典数据列表 +export function listData(query) { + return request({ + url: '/system/dict/data/list', + method: 'get', + params: query + }) +} + +// 查询字典数据详细 +export function getData(dictCode) { + return request({ + url: '/system/dict/data/info/' + dictCode, + method: 'get' + }) +} + +// 根据字典类型查询字典数据信息 +export function getDicts(dictType) { + if (typeof (dictType) === "object") { + return request({ + url: '/system/dict/data/types', + data: dictType, + method: 'post' + }) + } else { + return request({ + url: '/system/dict/data/type/' + dictType, + method: 'get' + }) + } +} + +// 新增字典数据 +export function addData(data) { + return request({ + url: '/system/dict/data', + method: 'post', + data: data + }) +} + +// 修改字典数据 +export function updateData(data) { + return request({ + url: '/system/dict/data', + method: 'put', + data: data + }) +} + +// 删除字典数据 +export function delData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'delete' + }) +} + +// 导出字典数据 +export function exportData(query) { + return request({ + url: '/system/dict/data/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ARW-vue-main/src/api/system/dict/type.js b/ARW-vue-main/src/api/system/dict/type.js new file mode 100644 index 0000000..27ae18f --- /dev/null +++ b/ARW-vue-main/src/api/system/dict/type.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + +// 查询字典类型列表 +export function listType(query) { + return request({ + url: '/system/dict/type/list', + method: 'get', + params: query + }) +} + +// 查询字典类型详细 +export function getType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'get' + }) +} + +// 新增字典类型 +export function addType(data) { + return request({ + url: '/system/dict/type/edit', + method: 'post', + data: data + }) +} + +// 修改字典类型 +export function updateType(data) { + return request({ + url: '/system/dict/type/edit', + method: 'put', + data: data + }) +} + +// 删除字典类型 +export function delType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'delete' + }) +} + +// 清理参数缓存 +export function clearCache() { + return request({ + url: '/system/dict/type/clearCache', + method: 'delete' + }) +} + +// 导出字典类型 +export function exportType(query) { + return request({ + url: '/system/dict/type/export', + method: 'get', + params: query + }) +} + +// 获取字典选择框列表 +export function optionselect() { + return request({ + url: '/system/dict/type/optionselect', + method: 'get' + }) +} diff --git a/ARW-vue-main/src/api/system/login.js b/ARW-vue-main/src/api/system/login.js new file mode 100644 index 0000000..2f7043e --- /dev/null +++ b/ARW-vue-main/src/api/system/login.js @@ -0,0 +1,66 @@ +import request from '@/utils/request' + +// 登录方法 +export function login(username, password, code, uuid) { + const data = { + username, + password, + code, + uuid + } + return request({ + url: '/login', + method: 'POST', + data: data, + }) +} + +// 获取用户详细信息 +export function getInfo() { + return request({ + url: '/getInfo', + method: 'get' + }) +} + +// 退出方法 +export function logout() { + return request({ + url: '/LogOut', + method: 'POST' + }) +} + +// 获取验证码 +export function getCodeImg() { + return request({ + url: '/captchaImage', + method: 'get' + }) +} +/** + * 注册 + * @returns + */ +export function register(data) { + return request({ + url: '/register', + method: 'post', + data: data + }) +} + +/** + * 三方授权回调 + * @param {*} data + * @param {*} params + * @returns + */ +export function oauthCallback(data, params) { + return request({ + url: '/auth/callback', + method: 'post', + data: data, + params: params + }) +} \ No newline at end of file diff --git a/ARW-vue-main/src/api/system/menu.js b/ARW-vue-main/src/api/system/menu.js new file mode 100644 index 0000000..47d3ab1 --- /dev/null +++ b/ARW-vue-main/src/api/system/menu.js @@ -0,0 +1,84 @@ +import request from '@/utils/request' + +// 查询菜单列表 +export function listMenu(query) { + return request({ + url: '/system/menu/list', + method: 'get', + params: query + }) +} +// 查询菜单列表 +export function listMenuById(menuId) { + return request({ + url: '/system/menu/list/' + menuId, + method: 'get', + }) +} +// 查询菜单详细 +export function getMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'get', + }) +} + +// 查询菜单下拉树结构 +export function treeselect() { + return request({ + url: '/system/Menu/treeSelect', + method: 'get' + }) +} + +// 根据角色ID查询菜单下拉树结构 +export function roleMenuTreeselect(roleId) { + return request({ + url: '/system/menu/roleMenuTreeselect/' + roleId, + method: 'get', + }) +} + +// 新增菜单 +export const addMenu = (data) => { + return request({ + url: '/system/menu/add', + method: 'put', + data: data, + }) +} + +// 修改菜单 +export function updateMenu(data) { + return request({ + url: '/system/Menu/edit', + method: 'post', + data: data + }) +} + +// 删除菜单 +export function delMenu(menuId) { + return request({ + url: '/system/Menu/' + menuId, + method: 'delete' + }) +} + +//排序 +export function changeMenuSort(data) { + return request({ + url: '/system/Menu/ChangeSort', + method: 'GET', + params: data + }) +} + +// 获取路由 +export const getRouters = (query) => { + return request({ + url: '/getRouters', + method: 'get', + params: query + }) +} diff --git a/ARW-vue-main/src/api/system/notice.js b/ARW-vue-main/src/api/system/notice.js new file mode 100644 index 0000000..fc80afb --- /dev/null +++ b/ARW-vue-main/src/api/system/notice.js @@ -0,0 +1,61 @@ +import request from '@/utils/request' + +// 导航栏查询公告列表 +export function queryNotice(query) { + return request({ + url: '/system/notice/queryNotice', + method: 'get', + params: query + }) +} + +// 查询公告列表 +export function listNotice(query) { + return request({ + url: '/system/notice/list', + method: 'get', + params: query + }) +} + +// 查询公告详细 +export function getNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'get' + }) +} + +// 新增公告 +export function addNotice(data) { + return request({ + url: '/system/notice', + method: 'post', + data: data + }) +} + +// 修改公告 +export function updateNotice(data) { + return request({ + url: '/system/notice', + method: 'put', + data: data + }) +} + +// 删除公告 +export function delNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'delete' + }) +} + +// 发送通知公告 +export function sendNotice(noticeId) { + return request({ + url: '/system/notice/send/' + noticeId, + method: 'PUT' + }) +} \ No newline at end of file diff --git a/ARW-vue-main/src/api/system/post.js b/ARW-vue-main/src/api/system/post.js new file mode 100644 index 0000000..434cd35 --- /dev/null +++ b/ARW-vue-main/src/api/system/post.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询岗位列表 +export function listPost(query) { + return request({ + url: '/system/post/list', + method: 'get', + params: query + }) +} + +// 查询岗位详细 +export function getPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'get' + }) +} + +// 新增岗位 +export function addPost(data) { + return request({ + url: '/system/post', + method: 'post', + data: data + }) +} + +// 修改岗位 +export function updatePost(data) { + return request({ + url: '/system/post', + method: 'put', + data: data + }) +} + +// 删除岗位 +export function delPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'delete' + }) +} + +// 导出岗位 +export function exportPost(query) { + return request({ + url: '/system/post/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ARW-vue-main/src/api/system/role.js b/ARW-vue-main/src/api/system/role.js new file mode 100644 index 0000000..25b8d1e --- /dev/null +++ b/ARW-vue-main/src/api/system/role.js @@ -0,0 +1,75 @@ +import request from '@/utils/request' + +// 查询角色列表 +export function listRole(query) { + return request({ + url: '/system/role/list', + method: 'get', + params: query + }) +} + +// 查询角色详细 +export function getRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'get' + }) +} + +// 新增角色 +export const addRole = (data) => { + return request({ + url: '/system/role/edit', + method: 'post', + data: data, + }) +} + +// 修改角色 +export function updateRole(data) { + return request({ + url: '/system/role/edit', + method: 'put', + data: data + }) +} + +// 角色数据权限 +export function dataScope(data) { + return request({ + url: '/system/role/dataScope', + method: 'put', + data: data + }) +} + +// 角色状态修改 +export function changeRoleStatus(roleId, status) { + const data = { + roleId, + status + } + return request({ + url: '/system/role/changeStatus', + method: 'put', + data: data + }) +} + +// 删除角色 +export function delRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'delete' + }) +} + +// 导出角色 +export function exportRole(query) { + return request({ + url: '/system/role/export', + method: 'get', + params: query + }) +} diff --git a/ARW-vue-main/src/api/system/thirdaccount.js b/ARW-vue-main/src/api/system/thirdaccount.js new file mode 100644 index 0000000..7637df3 --- /dev/null +++ b/ARW-vue-main/src/api/system/thirdaccount.js @@ -0,0 +1,70 @@ +import request from '@/utils/request' + +/** +* 三方账号绑定分页查询 +* @param {查询条件} data +*/ +export function listThirdAccount(query) { + return request({ + url: 'system/ThirdAccount/list', + method: 'get', + params: query, + }) +} + + +/** +* 新增三方账号绑定 +* @param data +*/ +export function addThirdAccount(data) { + return request({ + url: 'system/ThirdAccount', + method: 'post', + data: data, + }) +} + +/** +* 修改三方账号绑定 +* @param data +*/ +export function updateThirdAccount(data) { + return request({ + url: 'system/ThirdAccount', + method: 'PUT', + data: data, + }) +} + +/** +* 获取三方账号绑定详情 +* @param {Id} +*/ +export function getThirdAccount(id) { + return request({ + url: 'system/ThirdAccount/' + id, + method: 'get' + }) +} + +/** +* 删除三方账号绑定 +* @param {主键} pid +*/ +export function delThirdAccount(pid) { + return request({ + url: 'system/ThirdAccount/' + pid, + method: 'delete' + }) +} + +// 导出三方账号绑定 +export function exportThirdAccount(query) { + return request({ + url: 'system/ThirdAccount/export', + method: 'get', + params: query + }) +} + diff --git a/ARW-vue-main/src/api/system/user.js b/ARW-vue-main/src/api/system/user.js new file mode 100644 index 0000000..5f91911 --- /dev/null +++ b/ARW-vue-main/src/api/system/user.js @@ -0,0 +1,128 @@ +import request from '@/utils/request' +import { praseStrZero } from "@/utils/ruoyi"; + +// 查询用户列表 +export function listUser(query) { + return request({ + url: '/system/user/list', + method: 'get', + params: query + }) +} + +// 查询用户详细 +export function getUser(userId) { + return request({ + url: '/system/user/' + praseStrZero(userId), + method: 'get' + }) +} + +// 新增用户 +export function addUser(data) { + return request({ + url: '/system/user/add', + method: 'post', + data: data + }) +} + +// 修改用户 +export function updateUser(data) { + return request({ + url: '/system/user/edit', + method: 'put', + data: data + }) +} + +// 删除用户 +export function delUser(userId) { + return request({ + url: '/system/user/' + userId, + method: 'delete' + }) +} + +// 导出用户 +export function exportUser(query) { + return request({ + url: '/system/User/export', + method: 'get', + params: query + }) +} + +// 用户密码重置 +export function resetUserPwd(userId, password) { + const data = { + userId, + password + } + return request({ + url: '/system/user/resetPwd', + method: 'put', + data: data + }) +} + +// 用户状态修改 +export function changeUserStatus(userId, status) { + const data = { + userId, + status + } + return request({ + url: '/system/user/changeStatus', + method: 'put', + data: data + }) +} + +// 查询用户个人信息 +export function getUserProfile() { + return request({ + url: '/system/user/Profile', + method: 'get' + }) +} + +// 修改用户个人信息 +export function updateUserProfile(data) { + return request({ + url: '/system/user/profile', + method: 'put', + data: data + }) +} + +// 用户密码重置 +export function updateUserPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword + } + return request({ + url: '/system/user/profile/updatePwd', + method: 'put', + params: data + }) +} + +// 用户头像上传 +export function uploadAvatar(data) { + return request({ + url: '/system/user/profile/avatar', + method: 'post', + data: data + }) +} + +// 下载用户导入模板 +export function importTemplate() { + return request({ + url: '/system/user/importTemplate', + method: 'get', + responseType: 'blob'//1.首先设置responseType对象格式为 blob: + }) +} diff --git a/ARW-vue-main/src/api/system/userRoles.js b/ARW-vue-main/src/api/system/userRoles.js new file mode 100644 index 0000000..d5d94b3 --- /dev/null +++ b/ARW-vue-main/src/api/system/userRoles.js @@ -0,0 +1,37 @@ +import request from '@/utils/request' + +// 查询角色用户 +export function getRoleUsers(query) { + return request({ + url: '/system/userRole/list', + method: 'get', + params: query, + }) +} + +// 添加角色用户 +export function createRoleUsers(data) { + return request({ + url: '/system/userRole/create', + method: 'post', + data + }) +} +// 删除角色用户 +export function deleteRoleUsers(data) { + return request({ + url: '/system/userRole/delete', + method: 'post', + data + }) +} +// 查询角色未添加用户列表 +export function getExcludeUsers(query) { + return request({ + url: '/system/userRole/getExcludeUsers', + method: 'get', + params: query, + }) +} + +// export default { getRoleUsers, getExcludeUsers } diff --git a/ARW-vue-main/src/api/tool/file.js b/ARW-vue-main/src/api/tool/file.js new file mode 100644 index 0000000..03b64a8 --- /dev/null +++ b/ARW-vue-main/src/api/tool/file.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + +/** +* 文件存储分页查询 +* @param {查询条件} data +*/ +export function listSysfile(query) { + return request({ + url: 'tool/file/list', + method: 'get', + params: query, + }) +} + +/** +* 新增文件存储 +* @param data +*/ +export function addSysfile(data) { + return request({ + url: 'tool/file', + method: 'post', + data: data, + }) +} + +/** +* 修改文件存储 +* @param data +*/ +export function updateSysfile(data) { + return request({ + url: 'tool/file', + method: 'PUT', + data: data, + }) +} + +/** +* 获取文件存储详情 +* @param {Id} +*/ +export function getSysfile(id) { + return request({ + url: 'tool/file/' + id, + method: 'get' + }) +} + +/** +* 删除文件存储 +* @param {主键} pid +*/ +export function delSysfile(pid) { + return request({ + url: 'tool/file/' + pid, + method: 'delete' + }) +} + +// 导出文件存储 +export function exportSysfile(query) { + return request({ + url: 'tool/file/export', + method: 'get', + params: query + }) +} + diff --git a/ARW-vue-main/src/api/tool/gen.js b/ARW-vue-main/src/api/tool/gen.js new file mode 100644 index 0000000..04cd085 --- /dev/null +++ b/ARW-vue-main/src/api/tool/gen.js @@ -0,0 +1,103 @@ +import request from '@/utils/request'; + +/** + * 获取数据库 + */ +export function codeGetDBList() { + return request({ + url: 'tool/gen/getDbList', + method: 'get', + }) +} +/** + * 获取数据库表 + */ +export function listDbTable(data) { + return request({ + url: 'tool/gen/getTableList', + method: 'get', + params: data, + }) +} +/** + * 生成代码 + */ +export async function codeGenerator(data) { + return await request({ + url: 'tool/gen/genCode', + method: 'POST', + data: data, + }) +} + +/** + * 获取表格列信息 + * @param {*} data + * @returns + */ +export function queryColumnInfo(tableId) { + return request({ + url: 'tool/gen/Column/' + tableId, + method: 'GET', + }) +} + +// 查询生成表数据 +export function listTable(params) { + return request({ + url: 'tool/gen/list', + method: 'get', + params: params + }) +} + +// 查询表详细信息 +export function getGenTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'get' + }) +} + +// 导入表 +export function importTable(data) { + return request({ + url: '/tool/gen/importTable', + method: 'post', + params: data + }) +} +// 删除表数据 +export function delTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'delete' + }) +} + +// 修改代码生成表信息 +export function updateGenTable(data) { + return request({ + url: '/tool/gen/', + method: 'put', + data: data + }) +} + +// 预览生成代码 +export function previewTable(tableId, data) { + return request({ + url: '/tool/gen/preview/' + tableId, + method: 'post', + params: data + }) +} + +// 同步数据库 +export function synchDb(tableId, data) { + return request({ + url: '/tool/gen/synchDb/' + tableId, + method: 'get', + params: data + }) +} \ No newline at end of file diff --git a/ARW-vue-main/src/assets/401_images/401.gif b/ARW-vue-main/src/assets/401_images/401.gif new file mode 100644 index 0000000..cd6e0d9 Binary files /dev/null and b/ARW-vue-main/src/assets/401_images/401.gif differ diff --git a/ARW-vue-main/src/assets/404_images/404.png b/ARW-vue-main/src/assets/404_images/404.png new file mode 100644 index 0000000..3d8e230 Binary files /dev/null and b/ARW-vue-main/src/assets/404_images/404.png differ diff --git a/ARW-vue-main/src/assets/404_images/404_cloud.png b/ARW-vue-main/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000..c6281d0 Binary files /dev/null and b/ARW-vue-main/src/assets/404_images/404_cloud.png differ diff --git a/ARW-vue-main/src/assets/icons/gitee-fill-round.png b/ARW-vue-main/src/assets/icons/gitee-fill-round.png new file mode 100644 index 0000000..458efa0 Binary files /dev/null and b/ARW-vue-main/src/assets/icons/gitee-fill-round.png differ diff --git a/ARW-vue-main/src/assets/icons/github-fill.png b/ARW-vue-main/src/assets/icons/github-fill.png new file mode 100644 index 0000000..418b4bc Binary files /dev/null and b/ARW-vue-main/src/assets/icons/github-fill.png differ diff --git a/ARW-vue-main/src/assets/icons/svg/404.svg b/ARW-vue-main/src/assets/icons/svg/404.svg new file mode 100644 index 0000000..6df5019 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/Steve-Jobs.svg b/ARW-vue-main/src/assets/icons/svg/Steve-Jobs.svg new file mode 100644 index 0000000..53843e2 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/Steve-Jobs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/alipay.svg b/ARW-vue-main/src/assets/icons/svg/alipay.svg new file mode 100644 index 0000000..9138981 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/alipay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/anq.svg b/ARW-vue-main/src/assets/icons/svg/anq.svg new file mode 100644 index 0000000..a466608 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/anq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/app.svg b/ARW-vue-main/src/assets/icons/svg/app.svg new file mode 100644 index 0000000..0796da3 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/app.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/backup.svg b/ARW-vue-main/src/assets/icons/svg/backup.svg new file mode 100644 index 0000000..a3272a4 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/backup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/bug.svg b/ARW-vue-main/src/assets/icons/svg/bug.svg new file mode 100644 index 0000000..05a150d --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/bug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/build.svg b/ARW-vue-main/src/assets/icons/svg/build.svg new file mode 100644 index 0000000..97c4688 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/build.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/button.svg b/ARW-vue-main/src/assets/icons/svg/button.svg new file mode 100644 index 0000000..904fddc --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/cascader.svg b/ARW-vue-main/src/assets/icons/svg/cascader.svg new file mode 100644 index 0000000..e256024 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/cascader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/chain.svg b/ARW-vue-main/src/assets/icons/svg/chain.svg new file mode 100644 index 0000000..ed3317f --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/chain.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/chart.svg b/ARW-vue-main/src/assets/icons/svg/chart.svg new file mode 100644 index 0000000..27728fb --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/checkbox.svg b/ARW-vue-main/src/assets/icons/svg/checkbox.svg new file mode 100644 index 0000000..013fd3a --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/checkbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/clipboard.svg b/ARW-vue-main/src/assets/icons/svg/clipboard.svg new file mode 100644 index 0000000..90923ff --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/clipboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/code.svg b/ARW-vue-main/src/assets/icons/svg/code.svg new file mode 100644 index 0000000..ed4d23c --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/codeConsole.svg b/ARW-vue-main/src/assets/icons/svg/codeConsole.svg new file mode 100644 index 0000000..672ec6e --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/codeConsole.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/color.svg b/ARW-vue-main/src/assets/icons/svg/color.svg new file mode 100644 index 0000000..44a81aa --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/component.svg b/ARW-vue-main/src/assets/icons/svg/component.svg new file mode 100644 index 0000000..29c3458 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/dashboard.svg b/ARW-vue-main/src/assets/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/database.svg b/ARW-vue-main/src/assets/icons/svg/database.svg new file mode 100644 index 0000000..7fbad9b --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/database.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/date-range.svg b/ARW-vue-main/src/assets/icons/svg/date-range.svg new file mode 100644 index 0000000..fda571e --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/date-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/date.svg b/ARW-vue-main/src/assets/icons/svg/date.svg new file mode 100644 index 0000000..52dc73e --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/date.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/deploy.svg b/ARW-vue-main/src/assets/icons/svg/deploy.svg new file mode 100644 index 0000000..f4a1c56 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/deploy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/dept.svg b/ARW-vue-main/src/assets/icons/svg/dept.svg new file mode 100644 index 0000000..894e4bf --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/dept.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/develop.svg b/ARW-vue-main/src/assets/icons/svg/develop.svg new file mode 100644 index 0000000..e189223 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/develop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/dict.svg b/ARW-vue-main/src/assets/icons/svg/dict.svg new file mode 100644 index 0000000..4849377 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/dict.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/dictionary.svg b/ARW-vue-main/src/assets/icons/svg/dictionary.svg new file mode 100644 index 0000000..6e83c43 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/dictionary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/doc.svg b/ARW-vue-main/src/assets/icons/svg/doc.svg new file mode 100644 index 0000000..9160de8 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/doc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/documentation.svg b/ARW-vue-main/src/assets/icons/svg/documentation.svg new file mode 100644 index 0000000..7043122 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/download.svg b/ARW-vue-main/src/assets/icons/svg/download.svg new file mode 100644 index 0000000..c896951 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/drag.svg b/ARW-vue-main/src/assets/icons/svg/drag.svg new file mode 100644 index 0000000..4185d3c --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/druid.svg b/ARW-vue-main/src/assets/icons/svg/druid.svg new file mode 100644 index 0000000..a2b4b4e --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/druid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/edit.svg b/ARW-vue-main/src/assets/icons/svg/edit.svg new file mode 100644 index 0000000..d26101f --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/education.svg b/ARW-vue-main/src/assets/icons/svg/education.svg new file mode 100644 index 0000000..7bfb01d --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/email.svg b/ARW-vue-main/src/assets/icons/svg/email.svg new file mode 100644 index 0000000..74d25e2 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/error.svg b/ARW-vue-main/src/assets/icons/svg/error.svg new file mode 100644 index 0000000..fd935da --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/example.svg b/ARW-vue-main/src/assets/icons/svg/example.svg new file mode 100644 index 0000000..46f42b5 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/excel.svg b/ARW-vue-main/src/assets/icons/svg/excel.svg new file mode 100644 index 0000000..74d97b8 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/excel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/exit-fullscreen.svg b/ARW-vue-main/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..485c128 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/eye-open.svg b/ARW-vue-main/src/assets/icons/svg/eye-open.svg new file mode 100644 index 0000000..88dcc98 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/eye.svg b/ARW-vue-main/src/assets/icons/svg/eye.svg new file mode 100644 index 0000000..16ed2d8 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/form.svg b/ARW-vue-main/src/assets/icons/svg/form.svg new file mode 100644 index 0000000..dcbaa18 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/fullscreen.svg b/ARW-vue-main/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 0000000..0e86b6f --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/fwb.svg b/ARW-vue-main/src/assets/icons/svg/fwb.svg new file mode 100644 index 0000000..59933fc --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/fwb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/github.svg b/ARW-vue-main/src/assets/icons/svg/github.svg new file mode 100644 index 0000000..db0a0d4 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/gonggao.svg b/ARW-vue-main/src/assets/icons/svg/gonggao.svg new file mode 100644 index 0000000..22aed08 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/gonggao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/guide.svg b/ARW-vue-main/src/assets/icons/svg/guide.svg new file mode 100644 index 0000000..b271001 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/icon.svg b/ARW-vue-main/src/assets/icons/svg/icon.svg new file mode 100644 index 0000000..82be8ee --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/icon1.svg b/ARW-vue-main/src/assets/icons/svg/icon1.svg new file mode 100644 index 0000000..82fbdd9 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/icon1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/image.svg b/ARW-vue-main/src/assets/icons/svg/image.svg new file mode 100644 index 0000000..16d572f --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/index.svg b/ARW-vue-main/src/assets/icons/svg/index.svg new file mode 100644 index 0000000..fdb3826 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/index.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/input.svg b/ARW-vue-main/src/assets/icons/svg/input.svg new file mode 100644 index 0000000..ab91381 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/input.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/international.svg b/ARW-vue-main/src/assets/icons/svg/international.svg new file mode 100644 index 0000000..e9b56ee --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/international.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/ipvisits.svg b/ARW-vue-main/src/assets/icons/svg/ipvisits.svg new file mode 100644 index 0000000..4ca473d --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/ipvisits.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/java.svg b/ARW-vue-main/src/assets/icons/svg/java.svg new file mode 100644 index 0000000..e2effbb --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/java.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/job.svg b/ARW-vue-main/src/assets/icons/svg/job.svg new file mode 100644 index 0000000..2a93a25 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/language.svg b/ARW-vue-main/src/assets/icons/svg/language.svg new file mode 100644 index 0000000..0082b57 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/link.svg b/ARW-vue-main/src/assets/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/list.svg b/ARW-vue-main/src/assets/icons/svg/list.svg new file mode 100644 index 0000000..20259ed --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/lock.svg b/ARW-vue-main/src/assets/icons/svg/lock.svg new file mode 100644 index 0000000..74fee54 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/log.svg b/ARW-vue-main/src/assets/icons/svg/log.svg new file mode 100644 index 0000000..d879d33 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/login.svg b/ARW-vue-main/src/assets/icons/svg/login.svg new file mode 100644 index 0000000..cc5a854 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/login.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/logininfor.svg b/ARW-vue-main/src/assets/icons/svg/logininfor.svg new file mode 100644 index 0000000..267f844 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/logininfor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/markdown.svg b/ARW-vue-main/src/assets/icons/svg/markdown.svg new file mode 100644 index 0000000..7cd6747 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/markdown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/menu.svg b/ARW-vue-main/src/assets/icons/svg/menu.svg new file mode 100644 index 0000000..e4360a0 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/message.svg b/ARW-vue-main/src/assets/icons/svg/message.svg new file mode 100644 index 0000000..14ca817 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/mnt.svg b/ARW-vue-main/src/assets/icons/svg/mnt.svg new file mode 100644 index 0000000..502a7c0 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/mnt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/money.svg b/ARW-vue-main/src/assets/icons/svg/money.svg new file mode 100644 index 0000000..c1580de --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/monitor.svg b/ARW-vue-main/src/assets/icons/svg/monitor.svg new file mode 100644 index 0000000..bc308cb --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/monitor.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/nested.svg b/ARW-vue-main/src/assets/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/number.svg b/ARW-vue-main/src/assets/icons/svg/number.svg new file mode 100644 index 0000000..ad5ce9a --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/number.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/online.svg b/ARW-vue-main/src/assets/icons/svg/online.svg new file mode 100644 index 0000000..330a202 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/online.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/password.svg b/ARW-vue-main/src/assets/icons/svg/password.svg new file mode 100644 index 0000000..6c64def --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/pdf.svg b/ARW-vue-main/src/assets/icons/svg/pdf.svg new file mode 100644 index 0000000..957aa0c --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/people.svg b/ARW-vue-main/src/assets/icons/svg/people.svg new file mode 100644 index 0000000..2bd54ae --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/peoples.svg b/ARW-vue-main/src/assets/icons/svg/peoples.svg new file mode 100644 index 0000000..aab852e --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/peoples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/permission.svg b/ARW-vue-main/src/assets/icons/svg/permission.svg new file mode 100644 index 0000000..c4c7409 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/permission.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/phone.svg b/ARW-vue-main/src/assets/icons/svg/phone.svg new file mode 100644 index 0000000..ab8e8c4 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/post.svg b/ARW-vue-main/src/assets/icons/svg/post.svg new file mode 100644 index 0000000..2922c61 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/post.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/qiniu.svg b/ARW-vue-main/src/assets/icons/svg/qiniu.svg new file mode 100644 index 0000000..c2f9f8b --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/qiniu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/qq.svg b/ARW-vue-main/src/assets/icons/svg/qq.svg new file mode 100644 index 0000000..ee13d4e --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/question.svg b/ARW-vue-main/src/assets/icons/svg/question.svg new file mode 100644 index 0000000..cf75bd4 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/radio.svg b/ARW-vue-main/src/assets/icons/svg/radio.svg new file mode 100644 index 0000000..0cde345 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/rate.svg b/ARW-vue-main/src/assets/icons/svg/rate.svg new file mode 100644 index 0000000..aa3b14d --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/rate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/redis.svg b/ARW-vue-main/src/assets/icons/svg/redis.svg new file mode 100644 index 0000000..2f1d62d --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/redis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/role.svg b/ARW-vue-main/src/assets/icons/svg/role.svg new file mode 100644 index 0000000..76cb18f --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/role.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/row.svg b/ARW-vue-main/src/assets/icons/svg/row.svg new file mode 100644 index 0000000..0780992 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/row.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/search.svg b/ARW-vue-main/src/assets/icons/svg/search.svg new file mode 100644 index 0000000..84233dd --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/select.svg b/ARW-vue-main/src/assets/icons/svg/select.svg new file mode 100644 index 0000000..d628382 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/select.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/server.svg b/ARW-vue-main/src/assets/icons/svg/server.svg new file mode 100644 index 0000000..ca37b00 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/shopping.svg b/ARW-vue-main/src/assets/icons/svg/shopping.svg new file mode 100644 index 0000000..87513e7 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/shopping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/size.svg b/ARW-vue-main/src/assets/icons/svg/size.svg new file mode 100644 index 0000000..ddb25b8 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/skill.svg b/ARW-vue-main/src/assets/icons/svg/skill.svg new file mode 100644 index 0000000..a3b7312 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/slider.svg b/ARW-vue-main/src/assets/icons/svg/slider.svg new file mode 100644 index 0000000..fbe4f39 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/slider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/source.svg b/ARW-vue-main/src/assets/icons/svg/source.svg new file mode 100644 index 0000000..1c3a038 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/source.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/sqlMonitor.svg b/ARW-vue-main/src/assets/icons/svg/sqlMonitor.svg new file mode 100644 index 0000000..950a430 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/sqlMonitor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/star.svg b/ARW-vue-main/src/assets/icons/svg/star.svg new file mode 100644 index 0000000..6cf86e6 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/swagger.svg b/ARW-vue-main/src/assets/icons/svg/swagger.svg new file mode 100644 index 0000000..05d4e7b --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/switch.svg b/ARW-vue-main/src/assets/icons/svg/switch.svg new file mode 100644 index 0000000..0ba61e3 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/switch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/sys-tools.svg b/ARW-vue-main/src/assets/icons/svg/sys-tools.svg new file mode 100644 index 0000000..324aa04 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/sys-tools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/system.svg b/ARW-vue-main/src/assets/icons/svg/system.svg new file mode 100644 index 0000000..dba28cf --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/system.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/system1.svg b/ARW-vue-main/src/assets/icons/svg/system1.svg new file mode 100644 index 0000000..37b0a0a --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/system1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/tab.svg b/ARW-vue-main/src/assets/icons/svg/tab.svg new file mode 100644 index 0000000..b4b48e4 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/table.svg b/ARW-vue-main/src/assets/icons/svg/table.svg new file mode 100644 index 0000000..0e3dc9d --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/textarea.svg b/ARW-vue-main/src/assets/icons/svg/textarea.svg new file mode 100644 index 0000000..2709f29 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/textarea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/theme.svg b/ARW-vue-main/src/assets/icons/svg/theme.svg new file mode 100644 index 0000000..5982a2f --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/time-range.svg b/ARW-vue-main/src/assets/icons/svg/time-range.svg new file mode 100644 index 0000000..13c1202 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/time-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/time.svg b/ARW-vue-main/src/assets/icons/svg/time.svg new file mode 100644 index 0000000..b376e32 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/tool.svg b/ARW-vue-main/src/assets/icons/svg/tool.svg new file mode 100644 index 0000000..c813067 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/tool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/tools.svg b/ARW-vue-main/src/assets/icons/svg/tools.svg new file mode 100644 index 0000000..aba1a40 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/tools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/tree-table.svg b/ARW-vue-main/src/assets/icons/svg/tree-table.svg new file mode 100644 index 0000000..8aafdb8 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/tree.svg b/ARW-vue-main/src/assets/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/unlock.svg b/ARW-vue-main/src/assets/icons/svg/unlock.svg new file mode 100644 index 0000000..1219e41 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/unlock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/upload.svg b/ARW-vue-main/src/assets/icons/svg/upload.svg new file mode 100644 index 0000000..bae49c0 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/user.svg b/ARW-vue-main/src/assets/icons/svg/user.svg new file mode 100644 index 0000000..0ba0716 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/validCode.svg b/ARW-vue-main/src/assets/icons/svg/validCode.svg new file mode 100644 index 0000000..cfb1021 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/validCode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/visits.svg b/ARW-vue-main/src/assets/icons/svg/visits.svg new file mode 100644 index 0000000..8425662 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/visits.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/web.svg b/ARW-vue-main/src/assets/icons/svg/web.svg new file mode 100644 index 0000000..9c57415 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/web.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/wechat.svg b/ARW-vue-main/src/assets/icons/svg/wechat.svg new file mode 100644 index 0000000..c586e55 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/weixin.svg b/ARW-vue-main/src/assets/icons/svg/weixin.svg new file mode 100644 index 0000000..8dbcfa5 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/weixin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/zip.svg b/ARW-vue-main/src/assets/icons/svg/zip.svg new file mode 100644 index 0000000..f806fc4 --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/zip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/svg/zujian.svg b/ARW-vue-main/src/assets/icons/svg/zujian.svg new file mode 100644 index 0000000..2aba32f --- /dev/null +++ b/ARW-vue-main/src/assets/icons/svg/zujian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/icons/wechat-fill.png b/ARW-vue-main/src/assets/icons/wechat-fill.png new file mode 100644 index 0000000..c32e4f1 Binary files /dev/null and b/ARW-vue-main/src/assets/icons/wechat-fill.png differ diff --git a/ARW-vue-main/src/assets/images/dark.svg b/ARW-vue-main/src/assets/images/dark.svg new file mode 100644 index 0000000..f646bd7 --- /dev/null +++ b/ARW-vue-main/src/assets/images/dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/images/light.svg b/ARW-vue-main/src/assets/images/light.svg new file mode 100644 index 0000000..ab7cc08 --- /dev/null +++ b/ARW-vue-main/src/assets/images/light.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ARW-vue-main/src/assets/images/profile.jpg b/ARW-vue-main/src/assets/images/profile.jpg new file mode 100644 index 0000000..997732a Binary files /dev/null and b/ARW-vue-main/src/assets/images/profile.jpg differ diff --git a/ARW-vue-main/src/assets/images/reward.jpg b/ARW-vue-main/src/assets/images/reward.jpg new file mode 100644 index 0000000..68fe0d3 Binary files /dev/null and b/ARW-vue-main/src/assets/images/reward.jpg differ diff --git a/ARW-vue-main/src/assets/logo/logo.png b/ARW-vue-main/src/assets/logo/logo.png new file mode 100644 index 0000000..8164cf3 Binary files /dev/null and b/ARW-vue-main/src/assets/logo/logo.png differ diff --git a/ARW-vue-main/src/assets/logo/logo1.png b/ARW-vue-main/src/assets/logo/logo1.png new file mode 100644 index 0000000..9838306 Binary files /dev/null and b/ARW-vue-main/src/assets/logo/logo1.png differ diff --git a/ARW-vue-main/src/assets/styles/black.scss b/ARW-vue-main/src/assets/styles/black.scss new file mode 100644 index 0000000..e2e340c --- /dev/null +++ b/ARW-vue-main/src/assets/styles/black.scss @@ -0,0 +1,138 @@ +// 黑夜模式 +[data-theme='theme-black'] { + --base-color: #22272e; // #304156; + --base-color-rgba: rgba(34,39,46, 0.3); + --base-color-white: #ffffff; + + // root + --base-bg-main: var(--base-color); + --base-menu-background: var(--base-color); + --base-logo-title-color: var(--base-color-white); + --base-topBar-background: var(--base-color) !important; + --base-topBar-color: var(--base-color-white); + + --base-color-bar: #dadada; + --base-border-color: #424242; + --base-border-black: #333333; + --base-text-color-regular: #9b9da1; + --base-text-color-placeholder: #7a7a7a; + --base-color-hover: #3c3c3c; + + // el-ement ui 设置 + --el-fill-color-light: var(--base-color-rgba) !important; + --el-fill-color-blank: var(--base-bg-main) !important; + // --el-table-bg-color: var(--el-fill-color-blank); + --el-color-white: var(--base-color) !important; + --el-text-color-primary: var(--base-color-bar) !important; + --el-border-color-base: var(--base-border-black) !important; + --el-border-color-light: var(--base-border-black) !important; + --el-text-color-regular: var(--base-text-color-regular) !important; + --el-bg-color: var(--base-bg-main) !important; + --el-color-success-lighter: var(--base-color) !important; + --el-color-warning-lighter: var(--base-color) !important; + --el-color-danger-lighter: var(--base-color) !important; + --el-color-primary-lighter: var(--base-color) !important; + --el-color-primary-light-9: var(--base-color-hover) !important; + --el-text-color-disabled-base: var(--el-color-primary) !important; + --el-border-color-lighter: var(--base-border-black) !important; + // --el-text-color-placeholder: var(--base-text-color-placeholder) !important; + // --el-disabled-bg-color: var(--base-color) !important; + --el-fill-base: var(--base-color-white) !important; + // el-date-picker bg + --el-bg-color-overlay: var(--base-bg-main) !important; + --el-disabled-text-color: var(--base-bg-main) !important; + // drawer + .drawer-item, + .drawer-title { + color: var(--base-color-white) !important; + } + + .el-button--primary, + .el-button--info, + .el-button--danger, + .el-button--success, + .el-button--warning { + --el-button-text-color: var(--base-color-white) !important; + --el-button-hover-text-color: var(--base-color-white) !important; + --el-button-disabled-text-color: var(--base-color-white) !important; + &:hover { + border-color: var(--el-button-hover-border-color, var(--el-button-hover-bg-color)) !important; + } + } + + // pagination + .el-pagination.is-background .el-pager li:not(.disabled).active { + color: var(--base-color-white) !important; + } + .el-pagination.is-background .btn-next, + .el-pagination.is-background .btn-prev, + .el-pagination.is-background .el-pager li { + background-color: var(--main-bg-color); + } + + // tabs + .el-tabs--border-card { + background-color: var(--el-color-white) !important; + } + .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active { + background: var(--base-color) !important; + } + + // alert / notice-bar + .home-card-item { + border: 1px solid var(--base-border-color-light) !important; + } + .el-alert, + .notice-bar { + border: 1px solid var(--base-border-color) !important; + background-color: var(--base-color) !important; + } + + // colorPicker + .el-color-picker__mask { + background: unset !important; + } + .el-color-picker__trigger { + border: 1px solid var(--base-border-color-light) !important; + } + + // popper / dropdown + .el-popper { + border: 1px solid var(--base-border-color) !important; + color: var(--el-text-color-primary) !important; + .el-popper__arrow:before { + background: var(--el-color-white) !important; + border: 1px solid var(--base-border-color); + } + a { + color: var(--el-text-color-primary) !important; + } + } + .el-popper, + .el-dropdown-menu { + background: var(--el-color-white) !important; + } + .el-dropdown-menu__item:hover:not(.is-disabled) { + background: var(--el-bg-color) !important; + } + .el-dropdown-menu__item.is-disabled { + font-weight: 700 !important; + } + + //tags menu 选择 + .tags-view-container .tags-view-wrapper .tags-view-item.active { + background-color: var(--base-color) !important; + // border-color: var(--base-color) !important; + } + + // md 编辑器、图片加载错误、 + .md, + .el-upload--picture-card, + .el-image__error { + background: none !important; + } + //el table loading mask + .el-loading-mask { + background-color: var(--base-color-rgba) !important; + } +} diff --git a/ARW-vue-main/src/assets/styles/btn.scss b/ARW-vue-main/src/assets/styles/btn.scss new file mode 100644 index 0000000..3590d8d --- /dev/null +++ b/ARW-vue-main/src/assets/styles/btn.scss @@ -0,0 +1,99 @@ +@import './variables.module.scss'; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn($blue) +} + +.light-blue-btn { + @include colorBtn($light-blue) +} + +.red-btn { + @include colorBtn($red) +} + +.pink-btn { + @include colorBtn($pink) +} + +.green-btn { + @include colorBtn($green) +} + +.tiffany-btn { + @include colorBtn($tiffany) +} + +.yellow-btn { + @include colorBtn($yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/ARW-vue-main/src/assets/styles/element-ui.scss b/ARW-vue-main/src/assets/styles/element-ui.scss new file mode 100644 index 0000000..bc4b114 --- /dev/null +++ b/ARW-vue-main/src/assets/styles/element-ui.scss @@ -0,0 +1,99 @@ +// cover some element-ui styles + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0px; + } +} + +// table 里面操作按钮样式覆盖 +.el-table__cell .cell { + .el-button.is-text{ + padding: 8px 5px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0px; + } + } +} +// fix 2.2.0 版本label标签不居中 +// .el-form-item--small .el-form-item__label { +// line-height: 32px !important; +// } + +// element ui 移动端组件适配 +.el-icon { + vertical-align: middle; +} + +.el-header { + --el-header-padding: 0 0px !important; + // --el-header-height: 50px !important; +} +// el 2.2.0 text button +.el-button.is-text { + color: var(--el-color-primary) !important; +} +@media screen and (max-width: 500px) { + .el-message { + min-width: 300px !important; + } +} + +@media screen and (max-width: 500px) { + .el-message-box { + width: 300px !important; + } + + .el-pagination__jump { + display: none !important; + } + + .el-pagination__sizes { + display: none !important; + } +} + +// dialog +@media screen and (max-width: 700px) { + .el-dialog { + --el-dialog-width: 100% !important; + --el-dialog-margin-top: 0 !important; + } + .el-dialog:not(.is-fullscreen) { + margin-top: 0 !important; + } + .el-drawer { + width: 85% !important; + } +} + +/** 表格更多操作下拉样式 */ +.el-table .el-dropdown-link { + cursor: pointer; + color: #409eff; + margin-left: 5px; +} + +.el-table .el-dropdown, +.el-icon-arrow-down { + font-size: 12px; +} + +//适配完毕 + +// 隐藏picture-card 上传按钮 +.hide .el-upload--picture-card { + display: none; +} diff --git a/ARW-vue-main/src/assets/styles/index.scss b/ARW-vue-main/src/assets/styles/index.scss new file mode 100644 index 0000000..f4e6df4 --- /dev/null +++ b/ARW-vue-main/src/assets/styles/index.scss @@ -0,0 +1,277 @@ +@import './variables.module.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; +@import './btn.scss'; +@import './waves.scss'; +// @import './black.scss'; + +html, +body, +#app { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, SimSun, sans-serif; + font-weight: 400; + -webkit-font-smoothing: antialiased; + -webkit-tap-highlight-color: transparent; + background-color: var(--base-bg-main); + // overflow: hidden; + position: relative; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0 !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: ' '; + clear: both; + height: 0; + } +} + +.text-center { + text-align: center; +} + +.link-type, +.link-type:focus { + color: var(--el-color-primary); + cursor: pointer; + + &:hover { + // color: rgb(32, 160, 255); + opacity: 0.3; + } +} + +/** 基础通用 **/ +.pt5 { + padding-top: 5px; +} + +.pr5 { + padding-right: 5px; +} + +.pb5 { + padding-bottom: 5px; +} +.pb20 { + padding-bottom: 20px; +} + +.mt5 { + margin-top: 5px; +} + +.mr5 { + margin-right: 5px; +} + +.mb5 { + margin-bottom: 5px; +} + +.mb8 { + margin-bottom: 8px; +} + +.ml5 { + margin-left: 5px; +} + +.mt10 { + margin-top: 10px; +} + +.mr10 { + margin-right: 10px; +} + +.mb10 { + margin-bottom: 10px; +} + +.ml10 { + margin-left: 10px; +} + +.mt20 { + margin-top: 20px; +} + +.mr20 { + margin-right: 20px; +} + +.mb20 { + margin-bottom: 20px; +} + +.ml20 { + margin-left: 20px; +} + +.ml { + margin-left: auto; +} + +.mr { + margin-right: auto; +} + +.mt { + margin-top: auto; +} + +.mb { + margin-bottom: auto; +} +.w20 { + width: 20%; +} +.w100 { + width: 100%; +} + +.pull-right { + float: right !important; +} + +/* text color */ +.text-navy { + color: #1ab394; +} +.text-pink { + color: pink; +} +.text-primary { + color: inherit; +} + +.text-success { + color: #1c84c6; +} + +.text-info { + color: #23c6c8; +} + +.text-warning { + color: #f8ac59; +} + +.text-danger { + color: #ff0000; +} + +.text-muted { + color: #888888; +} + +.text-orange { + color: #ff7d00; +} + +.text-hotpink { + color: hotpink; +} + +.text-green { + color: green; +} + +.text-greenyellow { + color: greenyellow; +} +.text-purple { + color: #ff00ff; +} + +/* image */ +.img-circle { + border-radius: 50%; +} + +.card-box { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 10px; +} + +.icon { + width: 100px; +} + +.table-td-thumb { + width: 56px; +} + +.flex-center { + flex-direction: column; + overflow: hidden; +} diff --git a/ARW-vue-main/src/assets/styles/login.scss b/ARW-vue-main/src/assets/styles/login.scss new file mode 100644 index 0000000..9cc0e1d --- /dev/null +++ b/ARW-vue-main/src/assets/styles/login.scss @@ -0,0 +1,73 @@ +.login { + background: radial-gradient(200% 100% at bottom center, #f7f7b6, #e96f92, #1b2947); + background: radial-gradient(220% 105% at top center, #1b2947 10%, #75517d 40%, #e96f92 65%, #f7f7b6); + background-attachment: fixed; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; + height: 100%; + // background-image: url('../assets/images/login-background.jpg'); + background-size: cover; +} + +.title { + margin: 0px auto 30px auto; + text-align: center; + // color: #fff; +} + +.login-form { + border-radius: 6px; + background: #ffffff; + // background-color: hsla(0, 0%, 100%, 0.3); + width: 310px; + padding: 25px 15px 5px 15px; + position: relative; + + .input-icon { + height: 39px; + width: 14px; + margin-left: 0px; + } +} + +.login-tip { + font-size: 13px; + text-align: center; + color: #bfbfbf; +} + +.login-code { + width: 33%; + height: 40px; + float: right; + + img { + cursor: pointer; + vertical-align: middle; + } +} + +.el-login-footer { + height: 40px; + line-height: 40px; + position: fixed; + bottom: 0; + width: 100%; + text-align: center; + color: #fff; + font-family: Arial; + font-size: 12px; + letter-spacing: 1px; +} + +.login-code-img { + height: 40px; + padding-left: 12px; +} +.langSet { + position: absolute; + right: 20px; + top: 10px; +} diff --git a/ARW-vue-main/src/assets/styles/mixin.scss b/ARW-vue-main/src/assets/styles/mixin.scss new file mode 100644 index 0000000..06fa061 --- /dev/null +++ b/ARW-vue-main/src/assets/styles/mixin.scss @@ -0,0 +1,66 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/ARW-vue-main/src/assets/styles/sidebar.scss b/ARW-vue-main/src/assets/styles/sidebar.scss new file mode 100644 index 0000000..d055a25 --- /dev/null +++ b/ARW-vue-main/src/assets/styles/sidebar.scss @@ -0,0 +1,100 @@ +#app { + .sidebar { + position: relative; + overflow-y: hidden; + z-index: 1001; + transition: width 0.28s ease; + background-color: var(--base-menu-background); + height: 100%; + display: flex; + flex-direction: column; + -webkit-box-shadow: 2px 0 14px rgb(0 21 41 / 10%); + box-shadow: 2px 0 14px rgb(0 21 41 / 10%); + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + // 去掉el-menu边框 + .el-menu { + border: none; + } + } + + // 展开sidebar状态设置svg-icon边距 + .openSidebar { + .sidebar { + transform: translate(0); + } + .sidebar .svg-icon { + margin-right: 5px; + } + } + + // 隐藏侧边栏样式 + .hideSidebar { + .el-aside { + --el-aside-width: 60px; + } + // 隐藏箭头 + .el-sub-menu { + overflow: hidden; + + & > .el-sub-menu__title { + .el-sub-menu__icon-arrow { + display: none; + } + } + } + // 折叠状态下 + .el-menu--collapse { + [class^='el-icon'] { + width: auto; + font-size: medium; + margin-right: 0; + } + .el-sub-menu { + & > .el-sub-menu__title { + & > span { + height: 3000px; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar { + transition: transform 0.28s; + position: fixed; + // background: var(--base-menu-background, #fff); + } + + &.hideSidebar { + .sidebar { + display: none; + } + } + } +} + +// when menu collapsed +.el-menu--vertical { + // the scroll bar appears when the subMenu is too long + > .el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar { + width: 6px; + } + } +} diff --git a/ARW-vue-main/src/assets/styles/transition.scss b/ARW-vue-main/src/assets/styles/transition.scss new file mode 100644 index 0000000..4cb27cc --- /dev/null +++ b/ARW-vue-main/src/assets/styles/transition.scss @@ -0,0 +1,48 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/ARW-vue-main/src/assets/styles/variables.module.scss b/ARW-vue-main/src/assets/styles/variables.module.scss new file mode 100644 index 0000000..4143697 --- /dev/null +++ b/ARW-vue-main/src/assets/styles/variables.module.scss @@ -0,0 +1,41 @@ +// base color +$blue: #324157; +$light-blue: #3a71a8; +$red: #c03639; +$pink: #e65d6e; +$green: #30b08f; +$tiffany: #4ab7bd; +$yellow: #fec171; +$panGreen: #30b08f; + +// 默认菜单主题风格 +:root { + --base-text-color-rgba: rgba(0, 0, 0, 0.85); + --base-sidebar-width: 220px; + --el-aside-width: 220px; + --base-footer-height: 30px; + --base-tags-height: 34px; + --base-header-height: 50px; +} + +/***侧边栏深色配置***/ +[data-theme='theme-dark'] { + --base-menu-background: #2b333e; + --base-logo-title-color: #ffffff; + // // el-ement ui 设置 + // --el-fill-color-blank: #304156; + --el-text-color-primary: #e5eaf3; + --el-menu-text-color: var(--el-text-color-primary); +} +html.dark { + /* custom dark bg color */ + // --el-bg-color: #141414; + --base-color-white: #ffffff; + --base-text-color-rgba: #ffffff; +} +html.cafe { + filter: sepia(0.9) hue-rotate(315deg) brightness(0.9); +} +html.contrast { + filter: contrast(2); +} diff --git a/ARW-vue-main/src/assets/styles/waves.scss b/ARW-vue-main/src/assets/styles/waves.scss new file mode 100644 index 0000000..23add2c --- /dev/null +++ b/ARW-vue-main/src/assets/styles/waves.scss @@ -0,0 +1,101 @@ +/* Waves v0.6.0 +* http://fian.my.id/Waves +* +* Copyright 2014 Alfiana E. Sibuea and other contributors +* Released under the MIT license +* https://github.com/fians/Waves/blob/master/LICENSE +*/ +.waves-effect { + position: relative; + cursor: pointer; + display: inline-block; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: transparent; + vertical-align: middle; + z-index: 1; + will-change: opacity, transform; + transition: all 0.3s ease-out; +} +.waves-effect .waves-ripple { + position: absolute; + border-radius: 50%; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + opacity: 0; + background: rgba(0, 0, 0, 0.2); + transition: all 0.7s ease-out; + transition-property: opacity, -webkit-transform; + transition-property: transform, opacity; + transition-property: transform, opacity, -webkit-transform; + -webkit-transform: scale(0); + transform: scale(0); + pointer-events: none; +} +.waves-effect.waves-light .waves-ripple { + background-color: rgba(255, 255, 255, 0.45); +} +.waves-effect.waves-red .waves-ripple { + background-color: rgba(244, 67, 54, 0.7); +} +.waves-effect.waves-yellow .waves-ripple { + background-color: rgba(255, 235, 59, 0.7); +} +.waves-effect.waves-orange .waves-ripple { + background-color: rgba(255, 152, 0, 0.7); +} +.waves-effect.waves-purple .waves-ripple { + background-color: rgba(156, 39, 176, 0.7); +} +.waves-effect.waves-green .waves-ripple { + background-color: rgba(76, 175, 80, 0.7); +} +.waves-effect.waves-teal .waves-ripple { + background-color: rgba(0, 150, 136, 0.7); +} +.waves-effect input[type='button'], +.waves-effect input[type='reset'], +.waves-effect input[type='submit'] { + border: 0; + font-style: normal; + font-size: inherit; + text-transform: inherit; + background: none; +} +.waves-notransition { + transition: none !important; +} +.waves-circle { + -webkit-transform: translateZ(0); + transform: translateZ(0); + -webkit-mask-image: -webkit-radial-gradient(circle, #fff 100%, #000 100%); +} +.waves-input-wrapper { + border-radius: 0.2em; + vertical-align: bottom; +} +.waves-input-wrapper .waves-button-input { + position: relative; + top: 0; + left: 0; + z-index: 1; +} +.waves-circle { + text-align: center; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; + border-radius: 50%; + -webkit-mask-image: none; +} +.waves-block { + display: block; +} +a.waves-effect .waves-ripple { + z-index: -1; +} diff --git a/ARW-vue-main/src/auto-import.d.ts b/ARW-vue-main/src/auto-import.d.ts new file mode 100644 index 0000000..5f28183 --- /dev/null +++ b/ARW-vue-main/src/auto-import.d.ts @@ -0,0 +1,64 @@ +// Generated by 'unplugin-auto-import' +// We suggest you to commit this file into source control +declare global { + const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'] + const computed: typeof import('vue')['computed'] + const createApp: typeof import('vue')['createApp'] + const createPinia: typeof import('pinia')['createPinia'] + const customRef: typeof import('vue')['customRef'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const defineStore: typeof import('pinia')['defineStore'] + const effectScope: typeof import('vue')['effectScope'] + const EffectScope: typeof import('vue')['EffectScope'] + const getActivePinia: typeof import('pinia')['getActivePinia'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const inject: typeof import('vue')['inject'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const mapActions: typeof import('pinia')['mapActions'] + const mapGetters: typeof import('pinia')['mapGetters'] + const mapState: typeof import('pinia')['mapState'] + const mapStores: typeof import('pinia')['mapStores'] + const mapWritableState: typeof import('pinia')['mapWritableState'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const provide: typeof import('vue')['provide'] + const reactive: typeof import('vue')['reactive'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const setActivePinia: typeof import('pinia')['setActivePinia'] + const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const storeToRefs: typeof import('pinia')['storeToRefs'] + const toRaw: typeof import('vue')['toRaw'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const triggerRef: typeof import('vue')['triggerRef'] + const unref: typeof import('vue')['unref'] + const useAttrs: typeof import('vue')['useAttrs'] + const useCssModule: typeof import('vue')['useCssModule'] + const useRoute: typeof import('vue-router')['useRoute'] + const useRouter: typeof import('vue-router')['useRouter'] + const useSlots: typeof import('vue')['useSlots'] + const watch: typeof import('vue')['watch'] + const watchEffect: typeof import('vue')['watchEffect'] +} +export {} diff --git a/ARW-vue-main/src/components/Breadcrumb/index.vue b/ARW-vue-main/src/components/Breadcrumb/index.vue new file mode 100644 index 0000000..98e6f71 --- /dev/null +++ b/ARW-vue-main/src/components/Breadcrumb/index.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/ARW-vue-main/src/components/DictTag/index.vue b/ARW-vue-main/src/components/DictTag/index.vue new file mode 100644 index 0000000..8545d0e --- /dev/null +++ b/ARW-vue-main/src/components/DictTag/index.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/ARW-vue-main/src/components/Echarts/Gauge.vue b/ARW-vue-main/src/components/Echarts/Gauge.vue new file mode 100644 index 0000000..25960e9 --- /dev/null +++ b/ARW-vue-main/src/components/Echarts/Gauge.vue @@ -0,0 +1,90 @@ + + + diff --git a/ARW-vue-main/src/components/Editor/index.vue b/ARW-vue-main/src/components/Editor/index.vue new file mode 100644 index 0000000..ddc076a --- /dev/null +++ b/ARW-vue-main/src/components/Editor/index.vue @@ -0,0 +1,140 @@ + + \ No newline at end of file diff --git a/ARW-vue-main/src/components/FileUpload/index.vue b/ARW-vue-main/src/components/FileUpload/index.vue new file mode 100644 index 0000000..0fe5bd0 --- /dev/null +++ b/ARW-vue-main/src/components/FileUpload/index.vue @@ -0,0 +1,251 @@ + + + + + diff --git a/ARW-vue-main/src/components/Hamburger/index.vue b/ARW-vue-main/src/components/Hamburger/index.vue new file mode 100644 index 0000000..01cb87f --- /dev/null +++ b/ARW-vue-main/src/components/Hamburger/index.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/ARW-vue-main/src/components/HeaderSearch/index.vue b/ARW-vue-main/src/components/HeaderSearch/index.vue new file mode 100644 index 0000000..dd2af8b --- /dev/null +++ b/ARW-vue-main/src/components/HeaderSearch/index.vue @@ -0,0 +1,180 @@ + + + + + \ No newline at end of file diff --git a/ARW-vue-main/src/components/IconSelect/index.vue b/ARW-vue-main/src/components/IconSelect/index.vue new file mode 100644 index 0000000..ee5e9a1 --- /dev/null +++ b/ARW-vue-main/src/components/IconSelect/index.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/ARW-vue-main/src/components/IconSelect/requireIcons.js b/ARW-vue-main/src/components/IconSelect/requireIcons.js new file mode 100644 index 0000000..ac22fd7 --- /dev/null +++ b/ARW-vue-main/src/components/IconSelect/requireIcons.js @@ -0,0 +1,8 @@ +let icons = [] +const modules = import.meta.glob('./../../assets/icons/svg/*.svg'); +for (const path in modules) { + const p = path.split('assets/icons/svg/')[1].split('.svg')[0]; + icons.push(p); +} + +export default icons \ No newline at end of file diff --git a/ARW-vue-main/src/components/ImagePreview/index.vue b/ARW-vue-main/src/components/ImagePreview/index.vue new file mode 100644 index 0000000..30fd088 --- /dev/null +++ b/ARW-vue-main/src/components/ImagePreview/index.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/ARW-vue-main/src/components/ImageUpload/index.vue b/ARW-vue-main/src/components/ImageUpload/index.vue new file mode 100644 index 0000000..33cc4be --- /dev/null +++ b/ARW-vue-main/src/components/ImageUpload/index.vue @@ -0,0 +1,190 @@ + + + diff --git a/ARW-vue-main/src/components/LangSelect/index.vue b/ARW-vue-main/src/components/LangSelect/index.vue new file mode 100644 index 0000000..a608209 --- /dev/null +++ b/ARW-vue-main/src/components/LangSelect/index.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/ARW-vue-main/src/components/Notice/Index.vue b/ARW-vue-main/src/components/Notice/Index.vue new file mode 100644 index 0000000..ad4c3e5 --- /dev/null +++ b/ARW-vue-main/src/components/Notice/Index.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/ARW-vue-main/src/components/Pagination/index.vue b/ARW-vue-main/src/components/Pagination/index.vue new file mode 100644 index 0000000..9a25ecd --- /dev/null +++ b/ARW-vue-main/src/components/Pagination/index.vue @@ -0,0 +1,112 @@ + + + + diff --git a/ARW-vue-main/src/components/ParentView/index.vue b/ARW-vue-main/src/components/ParentView/index.vue new file mode 100644 index 0000000..7bf6148 --- /dev/null +++ b/ARW-vue-main/src/components/ParentView/index.vue @@ -0,0 +1,3 @@ + diff --git a/ARW-vue-main/src/components/RightToolbar/index.vue b/ARW-vue-main/src/components/RightToolbar/index.vue new file mode 100644 index 0000000..8825591 --- /dev/null +++ b/ARW-vue-main/src/components/RightToolbar/index.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/ARW-vue-main/src/components/Screenfull/index.vue b/ARW-vue-main/src/components/Screenfull/index.vue new file mode 100644 index 0000000..61e2186 --- /dev/null +++ b/ARW-vue-main/src/components/Screenfull/index.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/ARW-vue-main/src/components/SizeSelect/index.vue b/ARW-vue-main/src/components/SizeSelect/index.vue new file mode 100644 index 0000000..565d780 --- /dev/null +++ b/ARW-vue-main/src/components/SizeSelect/index.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/ARW-vue-main/src/components/SvgIcon/index.vue b/ARW-vue-main/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..44580f8 --- /dev/null +++ b/ARW-vue-main/src/components/SvgIcon/index.vue @@ -0,0 +1,62 @@ + + + diff --git a/ARW-vue-main/src/components/SvgIcon/svgicon.js b/ARW-vue-main/src/components/SvgIcon/svgicon.js new file mode 100644 index 0000000..bb68b67 --- /dev/null +++ b/ARW-vue-main/src/components/SvgIcon/svgicon.js @@ -0,0 +1,10 @@ +import * as components from '@element-plus/icons-vue' + +export default { + install: (app) => { + for (const key in components) { + const componentConfig = components[key]; + app.component(componentConfig.name, componentConfig); + } + }, +}; \ No newline at end of file diff --git a/ARW-vue-main/src/components/TopNav/index.vue b/ARW-vue-main/src/components/TopNav/index.vue new file mode 100644 index 0000000..d0c6e11 --- /dev/null +++ b/ARW-vue-main/src/components/TopNav/index.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/ARW-vue-main/src/components/Zr/Doc/index.vue b/ARW-vue-main/src/components/Zr/Doc/index.vue new file mode 100644 index 0000000..b7c73d8 --- /dev/null +++ b/ARW-vue-main/src/components/Zr/Doc/index.vue @@ -0,0 +1,12 @@ + + \ No newline at end of file diff --git a/ARW-vue-main/src/components/Zr/Git/index.vue b/ARW-vue-main/src/components/Zr/Git/index.vue new file mode 100644 index 0000000..de93bec --- /dev/null +++ b/ARW-vue-main/src/components/Zr/Git/index.vue @@ -0,0 +1,20 @@ + + \ No newline at end of file diff --git a/ARW-vue-main/src/components/iFrame/index.vue b/ARW-vue-main/src/components/iFrame/index.vue new file mode 100644 index 0000000..091b1a2 --- /dev/null +++ b/ARW-vue-main/src/components/iFrame/index.vue @@ -0,0 +1,31 @@ +