Эх сурвалжийг харах

1、升级Furion v4.3.3 2、跳转系统接口分组

zuohuaijun 3 жил өмнө
parent
commit
4558e4a9e2
59 өөрчлөгдсөн 868 нэмэгдсэн , 915 устгасан
  1. 48 48
      Admin.NET/Admin.NET.Application/AppConfig.json
  2. 6 3
      Admin.NET/Admin.NET.Application/Service/Test2Service.cs
  3. 1 1
      Admin.NET/Admin.NET.Application/Service/TestService.cs
  4. 0 0
      Admin.NET/Admin.NET.Application/Temp/CovidReport.html
  5. 299 324
      Admin.NET/Admin.NET.Core/Admin.NET.Core.xml
  6. 105 105
      Admin.NET/Admin.NET.Core/AdminNETConfig.json
  7. 2 2
      Admin.NET/Admin.NET.Core/Entity/WechatPay.cs
  8. 1 1
      Admin.NET/Admin.NET.Core/Entity/WechatUser.cs
  9. 1 1
      Admin.NET/Admin.NET.Core/EventBus/LogEventSubscriber.cs
  10. 15 18
      Admin.NET/Admin.NET.Core/Hub/ChatHub.cs
  11. 0 1
      Admin.NET/Admin.NET.Core/Hub/Dto/ForceExistUserRequest.cs
  12. 0 1
      Admin.NET/Admin.NET.Core/Hub/IChatClient.cs
  13. 2 2
      Admin.NET/Admin.NET.Core/Option/PayCallBackOptions.cs
  14. 3 3
      Admin.NET/Admin.NET.Core/Option/WechatOptions.cs
  15. 1 1
      Admin.NET/Admin.NET.Core/Option/WechatPayOptions.cs
  16. 113 113
      Admin.NET/Admin.NET.Core/RateLimitConfig.json
  17. 3 3
      Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs
  18. 1 1
      Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs
  19. 5 5
      Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenConfigService.cs
  20. 6 6
      Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs
  21. 1 1
      Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs
  22. 0 0
      Admin.NET/Admin.NET.Core/Service/Const/Dto/SelectorDto.cs
  23. 4 4
      Admin.NET/Admin.NET.Core/Service/Const/SysConstService.cs
  24. 4 4
      Admin.NET/Admin.NET.Core/Service/DataBase/SysDataBaseService.cs
  25. 0 0
      Admin.NET/Admin.NET.Core/Service/DataResource/Dto/DataResourceInput.cs
  26. 1 1
      Admin.NET/Admin.NET.Core/Service/DataResource/SysDataResourceService.cs
  27. 1 1
      Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs
  28. 1 1
      Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs
  29. 1 1
      Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs
  30. 2 2
      Admin.NET/Admin.NET.Core/Service/Logging/SysLogDiffService.cs
  31. 1 1
      Admin.NET/Admin.NET.Core/Service/Logging/SysLogExService.cs
  32. 1 1
      Admin.NET/Admin.NET.Core/Service/Logging/SysLogOpService.cs
  33. 1 1
      Admin.NET/Admin.NET.Core/Service/Logging/SysLogVisService.cs
  34. 1 1
      Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs
  35. 0 0
      Admin.NET/Admin.NET.Core/Service/Message/Dto/MessageInput.cs
  36. 0 50
      Admin.NET/Admin.NET.Core/Service/Message/IMessageService.cs
  37. 39 0
      Admin.NET/Admin.NET.Core/Service/Message/ISysMessageService.cs
  38. 27 38
      Admin.NET/Admin.NET.Core/Service/Message/SysMessageService.cs
  39. 1 1
      Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs
  40. 1 1
      Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeUserService.cs
  41. 1 1
      Admin.NET/Admin.NET.Core/Service/OnlineUser/SysOnlineUserService.cs
  42. 1 1
      Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs
  43. 1 1
      Admin.NET/Admin.NET.Core/Service/Pos/SysPosService.cs
  44. 1 1
      Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs
  45. 4 4
      Admin.NET/Admin.NET.Core/Service/Server/SysServerService.cs
  46. 2 2
      Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs
  47. 2 2
      Admin.NET/Admin.NET.Core/Service/Timer/SysTimerService.cs
  48. 1 1
      Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs
  49. 2 2
      Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatInput.cs
  50. 2 2
      Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatPayInput.cs
  51. 1 1
      Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatPayOutput.cs
  52. 6 6
      Admin.NET/Admin.NET.Core/Service/WeChat/WechatApiHttpClient.cs
  53. 47 47
      Admin.NET/Admin.NET.Core/Service/WeChat/WechatPayService.cs
  54. 21 21
      Admin.NET/Admin.NET.Core/Service/WeChat/WechatService.cs
  55. 1 1
      Admin.NET/Admin.NET.UnitTest/Admin.NET.UnitTest.csproj
  56. 2 2
      Admin.NET/Admin.NET.Web.Core/ProjectOptions.cs
  57. 26 26
      Admin.NET/Admin.NET.Web.Entry/Properties/launchSettings.json
  58. 23 22
      Admin.NET/Admin.NET.Web.Entry/appsettings.Development.json
  59. 25 24
      Admin.NET/Admin.NET.Web.Entry/appsettings.json

+ 48 - 48
Admin.NET/Admin.NET.Application/AppConfig.json

@@ -1,51 +1,51 @@
 {
-  "$schema": "https://gitee.com/dotnetchina/Furion/raw/net6/schemas/v3/furion-schema.json",
+    "$schema": "https://gitee.com/dotnetchina/Furion/raw/net6/schemas/v3/furion-schema.json",
 
-  "DbConnection": {
-    "EnableInitTable": true, // 启用初始化库表
-    "EnableDiffLog": false, // 启用库表差异日志
-    "ConnectionConfigs": [ // 默认第一个为主库
-      {
-        "ConfigId": "Dilon",
-        "DbType": "Sqlite", // MySql、SqlServer、Sqlite、Oracle、PostgreSQL、Dm、Kdbndp、Oscar、MySqlConnector、Access
-        "ConnectionString": "DataSource=./Admin.NET.db", // DataSource=C:\\db\\Admin.NET.db
-        "IsAutoCloseConnection": true
-      },
-      {
-        "ConfigId": "Test",
-        "DbType": "Sqlite",
-        "ConnectionString": "DataSource=./Test.db",
-        "IsAutoCloseConnection": true
-      }
-    ]
-  },
-  // 代码生成配置项-程序集名称集合
-  "CodeGen": {
-    "EntityAssemblyNames": [ "Admin.NET.Core", "Admin.NET.Application" ]
-  },
-  "Wechat": {
-    // 公众号
-    "WechatAppId": "",
-    "WechatAppSecret": "",
-    "EncodingAESKey": "",
-    "Token": "",
-    // 小程序
-    "WxOpenAppId": "",
-    "WxOpenAppSecret": "",
-    "WxOpenToken": "",
-    "WxOpenEncodingAESKey": ""
-  },
-  "WechatPay": {
-    "AppId": "", // 微信公众平台AppId、开放平台AppId、小程序AppId、企业微信CorpId
-    "MerchantId": "", // 商户平台的商户号
-    "MerchantV3Secret": "", // 商户平台的APIv3密钥
-    "MerchantCertificateSerialNumber": "", // 商户平台的证书序列号
-    "MerchantCertificatePrivateKey": "\\WxPayCert\\apiclient_key.pem" // 商户平台的API证书私钥(apiclient_key.pem文件内容)
-  },
-  "PayCallBack": {
-    "WechatPayUrl": "/notify/weChatPay/unifiedorder", // 微信支付回调
-    "WechatRefundUrl": "/notify/weChatPay/refund", // 微信退款回调
-    "AlipayUrl": "", // 支付宝支付回调
-    "AlipayRefundUrl": "" // 支付宝退款回调
-  }
+    "DbConnection": {
+        "EnableInitTable": false, // 启用初始化库表
+        "EnableDiffLog": false, // 启用库表差异日志
+        "ConnectionConfigs": [ // 默认第一个为主库
+            {
+                "ConfigId": "Dilon",
+                "DbType": "Sqlite", // MySql、SqlServer、Sqlite、Oracle、PostgreSQL、Dm、Kdbndp、Oscar、MySqlConnector、Access
+                "ConnectionString": "DataSource=./Admin.NET.db", // DataSource=C:\\db\\Admin.NET.db
+                "IsAutoCloseConnection": true
+            },
+            {
+                "ConfigId": "Test",
+                "DbType": "Sqlite",
+                "ConnectionString": "DataSource=./Test.db",
+                "IsAutoCloseConnection": true
+            }
+        ]
+    },
+    // 代码生成配置项-程序集名称集合
+    "CodeGen": {
+        "EntityAssemblyNames": [ "Admin.NET.Core", "Admin.NET.Application" ]
+    },
+    "Wechat": {
+        // 公众号
+        "WechatAppId": "",
+        "WechatAppSecret": "",
+        "EncodingAESKey": "",
+        "Token": "",
+        // 小程序
+        "WxOpenAppId": "",
+        "WxOpenAppSecret": "",
+        "WxOpenToken": "",
+        "WxOpenEncodingAESKey": ""
+    },
+    "WechatPay": {
+        "AppId": "", // 微信公众平台AppId、开放平台AppId、小程序AppId、企业微信CorpId
+        "MerchantId": "", // 商户平台的商户号
+        "MerchantV3Secret": "", // 商户平台的APIv3密钥
+        "MerchantCertificateSerialNumber": "", // 商户平台的证书序列号
+        "MerchantCertificatePrivateKey": "\\WxPayCert\\apiclient_key.pem" // 商户平台的API证书私钥(apiclient_key.pem文件内容)
+    },
+    "PayCallBack": {
+        "WechatPayUrl": "/notify/weChatPay/unifiedorder", // 微信支付回调
+        "WechatRefundUrl": "/notify/weChatPay/refund", // 微信退款回调
+        "AlipayUrl": "", // 支付宝支付回调
+        "AlipayRefundUrl": "" // 支付宝退款回调
+    }
 }

+ 6 - 3
Admin.NET/Admin.NET.Application/Service/TestService2.cs → Admin.NET/Admin.NET.Application/Service/Test2Service.cs

@@ -6,11 +6,14 @@ using System.IO;
 
 namespace Admin.NET.Application.Service;
 
-[ApiDescriptionSettings(TestConst.GroupName, Name = "XXX模块", Order = 200)]
+/// <summary>
+/// 自己业务服务
+/// </summary>
+[ApiDescriptionSettings(TestConst.GroupName, Order = 200)]
 [AllowAnonymous]
-public class TestService2 : IDynamicApiController, ITransient
+public class Test2Service : IDynamicApiController, ITransient
 {
-    public TestService2()
+    public Test2Service()
     {
     }
 

+ 1 - 1
Admin.NET/Admin.NET.Application/Service/TestService.cs

@@ -9,7 +9,7 @@ namespace Admin.NET.Application.Service;
 /// <summary>
 /// 自己业务服务
 /// </summary>
-[ApiDescriptionSettings(TestConst.GroupName, Name = "XXX模块", Order = 200)]
+[ApiDescriptionSettings(TestConst.GroupName, Order = 200)]
 [AllowAnonymous]
 public class TestService : IDynamicApiController, ITransient
 {

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
Admin.NET/Admin.NET.Application/Temp/CovidReport.html


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 299 - 324
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml


+ 105 - 105
Admin.NET/Admin.NET.Core/AdminNETConfig.json

@@ -1,110 +1,110 @@
 {
-  "$schema": "https://gitee.com/dotnetchina/Furion/raw/net6/schemas/v3/furion-schema.json",
+    "$schema": "https://gitee.com/dotnetchina/Furion/raw/net6/schemas/v3/furion-schema.json",
 
-  "SpecificationDocumentSettings": {
-    "DocumentTitle": "Admin.NET 框架",
-    "GroupOpenApiInfos": [
-      {
-        "Group": "Default",
-        "Title": "Admin.NET",
-        "Description": "让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>",
-        "Version": "1.0.0",
-        "TermsOfService": "https://dotnetchina.gitee.io/furion/",
-        "Contact": {
-          "Name": "zuohuaijun",
-          "Url": "https://gitee.com/zuohuaijun/Admin.NET",
-          "Email": "515096995@qq.com"
+    "SpecificationDocumentSettings": {
+        "DocumentTitle": "Admin.NET 框架",
+        "GroupOpenApiInfos": [
+            {
+                "Group": "Default",
+                "Title": "Admin.NET",
+                "Description": "让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>",
+                "Version": "1.0.0",
+                "TermsOfService": "https://dotnetchina.gitee.io/furion/",
+                "Contact": {
+                    "Name": "zuohuaijun",
+                    "Url": "https://gitee.com/zuohuaijun/Admin.NET",
+                    "Email": "515096995@qq.com"
+                }
+            },
+            {
+                "Group": "All Groups",
+                "Title": "所有接口",
+                "Description": "让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>",
+                "Version": "1.0.0",
+                "TermsOfService": "https://dotnetchina.gitee.io/furion/",
+                "Contact": {
+                    "Name": "zuohuaijun",
+                    "Url": "https://gitee.com/zuohuaijun/Admin.NET",
+                    "Email": "515096995@qq.com"
+                }
+            }
+        ],
+        "EnableAllGroups": true,
+        "LoginInfo": {
+            "Enabled": false, // 是否开启Swagger登录
+            "CheckUrl": "/Swagger/CheckUrl",
+            "SubmitUrl": "/Swagger/SubmitUrl",
+            "UserName": "admin",
+            "Password": "000000"
         }
-      },
-      {
-        "Group": "All Groups",
-        "Title": "所有接口",
-        "Description": "让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>",
-        "Version": "1.0.0",
-        "TermsOfService": "https://dotnetchina.gitee.io/furion/",
-        "Contact": {
-          "Name": "zuohuaijun",
-          "Url": "https://gitee.com/zuohuaijun/Admin.NET",
-          "Email": "515096995@qq.com"
-        }
-      }
-    ],
-    "EnableAllGroups": true,
-    "LoginInfo": {
-      "Enabled": false, // 是否开启Swagger登录
-      "CheckUrl": "/Swagger/CheckUrl",
-      "SubmitUrl": "/Swagger/SubmitUrl",
-      "UserName": "admin",
-      "Password": "000000"
+    },
+    "AppSettings": {
+        "InjectSpecificationDocument": true // 生产环境是否开启Swagger
+    },
+    "DynamicApiControllerSettings": {
+        "LowercaseRoute": false,
+        "KeepName": true,
+        "AsLowerCamelCase": true // 小驼峰路由路径
+    },
+    "FriendlyExceptionSettings": {
+        "DefaultErrorMessage": "系统异常,请联系管理员",
+        "ThrowBah": true
+    },
+    "LocalizationSettings": {
+        "SupportedCultures": [ "zh-CN", "en-US" ], // 语言列表
+        "DefaultCulture": "zh-CN" // 默认语言
+    },
+    "JWTSettings": {
+        "ValidateIssuerSigningKey": true, // 是否验证密钥,bool 类型,默认true
+        "IssuerSigningKey": "3c1cbc3f546eda35168c3aa3cb91780fbe703f0996c6d123ea96dc85c70bbc0a", // 密钥,string 类型,必须是复杂密钥,长度大于16
+        "ValidateIssuer": true, // 是否验证签发方,bool 类型,默认true
+        "ValidIssuer": "Admin.NET", // 签发方,string 类型
+        "ValidateAudience": true, // 是否验证签收方,bool 类型,默认true
+        "ValidAudience": "Admin.NET", // 签收方,string 类型
+        "ValidateLifetime": true, // 是否验证过期时间,bool 类型,默认true,建议true
+        "ExpiredTime": 10080, // 过期时间,long 类型,单位分钟,默认20分钟
+        "ClockSkew": 5 // 过期时间容错值,long 类型,单位秒,默认5秒
+    },
+    "RefreshToken": {
+        "ExpiredTime": 20160 // 过期时间单位分钟(一般 refresh_token 的有效时间 > 2 * access_token 的有效时间)
+    },
+    "CorsAccessorSettings": {
+        "WithExposedHeaders": [ "Content-Disposition" ], // 如果前端不代理且是axios请求
+        "SignalRSupport": true // 启用 SignalR 跨域支持
+    },
+    "Cache": {
+        "CacheType": "MemoryCache", // RedisCache
+        "RedisConnectionString": "127.0.0.1:6379,password=,defaultDatabase=2",
+        "InstanceName": "zuo_"
+    },
+    "SnowId": {
+        "WorkerId": 5 // 取值范围0~63,默认1
+    },
+    "Upload": {
+        "Path": "upload/{yyyy}/{MM}/{dd}", // 文件上传目录
+        "MaxSize": 1048576,
+        "ContentType": [ "image/jpg", "image/png", "image/jpeg", "image/gif", "image/bmp", "text/plain", "application/pdf", "application/msword", "application/vnd.ms-excel", "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ]
+    },
+    "OSSProvider": {
+        "IsEnable": false,
+        "Provider": 2, // 0.Invalid/1.Minio/2.Aliyun/3.QCloud/4.Qiniu/5.HuaweiCloud
+        "Endpoint": "",
+        "Region": "",
+        "AccessKey": "",
+        "SecretKey": "",
+        "IsEnableHttps": true,
+        "IsEnableCache": true,
+        "Bucket": "",
+        "ProviderName": "Aliyun"
+    },
+    "Email": {
+        "Server": "smtp.163.com", // 主机
+        "Port": 465, // 端口 465/994 25
+        "SenderName": "系统邮件", // 发送者名称
+        "SenderEmail": "zuohuaijun@163.com", // 发件者邮箱
+        "ToEmail": "515096995@qq.com", // 接收人邮箱
+        "Account": "", // 发件邮箱账号
+        "Password": "", // 发件邮箱密码
+        "Security": true // 启用SSL和TLS
     }
-  },
-  "AppSettings": {
-    "InjectSpecificationDocument": true // 生产环境是否开启Swagger
-  },
-  "DynamicApiControllerSettings": {
-    "LowercaseRoute": false,
-    "KeepName": true,
-    "AsLowerCamelCase": true // 小驼峰路由路径
-  },
-  "FriendlyExceptionSettings": {
-    "DefaultErrorMessage": "系统异常,请联系管理员",
-    "ThrowBah": true
-  },
-  "LocalizationSettings": {
-    "SupportedCultures": [ "zh-CN", "en-US" ], // 语言列表
-    "DefaultCulture": "zh-CN" // 默认语言
-  },
-  "JWTSettings": {
-    "ValidateIssuerSigningKey": true, // 是否验证密钥,bool 类型,默认true
-    "IssuerSigningKey": "3c1cbc3f546eda35168c3aa3cb91780fbe703f0996c6d123ea96dc85c70bbc0a", // 密钥,string 类型,必须是复杂密钥,长度大于16
-    "ValidateIssuer": true, // 是否验证签发方,bool 类型,默认true
-    "ValidIssuer": "Admin.NET", // 签发方,string 类型
-    "ValidateAudience": true, // 是否验证签收方,bool 类型,默认true
-    "ValidAudience": "Admin.NET", // 签收方,string 类型
-    "ValidateLifetime": true, // 是否验证过期时间,bool 类型,默认true,建议true
-    "ExpiredTime": 10080, // 过期时间,long 类型,单位分钟,默认20分钟
-    "ClockSkew": 5 // 过期时间容错值,long 类型,单位秒,默认5秒
-  },
-  "RefreshToken": {
-    "ExpiredTime": 20160 // 过期时间单位分钟(一般 refresh_token 的有效时间 > 2 * access_token 的有效时间)
-  },
-  "CorsAccessorSettings": {
-    "WithExposedHeaders": [ "Content-Disposition" ], // 如果前端不代理且是axios请求
-    "SignalRSupport": true // 启用 SignalR 跨域支持
-  },
-  "Cache": {
-    "CacheType": "MemoryCache", // RedisCache
-    "RedisConnectionString": "127.0.0.1:6379,password=,defaultDatabase=2",
-    "InstanceName": "zuo_"
-  },
-  "SnowId": {
-    "WorkerId": 5 // 取值范围0~63,默认1
-  },
-  "Upload": {
-    "Path": "upload/{yyyy}/{MM}/{dd}", // 文件上传目录
-    "MaxSize": 1048576,
-    "ContentType": [ "image/jpg", "image/png", "image/jpeg", "image/gif", "image/bmp", "text/plain", "application/pdf", "application/msword", "application/vnd.ms-excel", "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ]
-  },
-  "OSSProvider": {
-    "IsEnable": false,
-    "Provider": 2, // 0.Invalid/1.Minio/2.Aliyun/3.QCloud/4.Qiniu/5.HuaweiCloud
-    "Endpoint": "",
-    "Region": "",
-    "AccessKey": "",
-    "SecretKey": "",
-    "IsEnableHttps": true,
-    "IsEnableCache": true,
-    "Bucket": "",
-    "ProviderName": "Aliyun"
-  },
-  "Email": {
-    "Server": "smtp.163.com", // 主机
-    "Port": 465, // 端口 465/994 25
-    "SenderName": "系统邮件", // 发送者名称
-    "SenderEmail": "zuohuaijun@163.com", // 发件者邮箱
-    "ToEmail": "515096995@qq.com", // 接收人邮箱
-    "Account": "", // 发件邮箱账号
-    "Password": "", // 发件邮箱密码
-    "Security": true // 启用SSL和TLS
-  }
 }

+ 2 - 2
Admin.NET/Admin.NET.Core/Entity/WechatPay.cs

@@ -4,7 +4,7 @@
 /// 微信支付表
 /// </summary>
 [SugarTable("wechat_pay", "微信支付表")]
-public class WechatPay : EntityBase
+public class WeChatPay : EntityBase
 {
     /// <summary>
     /// 微信商户号
@@ -130,7 +130,7 @@ public class WechatPay : EntityBase
     /// 关联微信用户
     /// </summary>
     [SugarColumn(IsIgnore = true)]
-    public WechatUser WechatUser { get; set; }
+    public WeChatUser WeChatUser { get; set; }
 
     /// <summary>
     /// 子商户号

+ 1 - 1
Admin.NET/Admin.NET.Core/Entity/WechatUser.cs

@@ -4,7 +4,7 @@
 /// 微信用户表
 /// </summary>
 [SugarTable("wechat_user", "微信用户表")]
-public class WechatUser : EntityBase
+public class WeChatUser : EntityBase
 {
     /// <summary>
     /// 关联系统用户Id

+ 1 - 1
Admin.NET/Admin.NET.Core/EventBus/LogEventSubscriber.cs

@@ -38,7 +38,7 @@ public class LogEventSubscriber : IEventSubscriber
         await _rep.InsertAsync((SysLogEx)context.Source.Payload);
 
         // 发送邮件
-        await scope.ServiceProvider.GetRequiredService<IMessageService>().SendEmail(JSON.Serialize(context.Source.Payload));
+        await scope.ServiceProvider.GetRequiredService<ISysMessageService>().SendEmail(JSON.Serialize(context.Source.Payload));
     }
 
     /// <summary>

+ 15 - 18
Admin.NET/Admin.NET.Core/Hub/ChatHub.cs

@@ -10,18 +10,17 @@ namespace Admin.NET.Core;
 public class ChatHub : Hub<IChatClient>
 {
     private readonly ISysCacheService _cache;
-    private readonly IMessageService _sendMessageService;
+    private readonly ISysMessageService _sysMessageService;
     private readonly SqlSugarRepository<SysOnlineUser> _sysOnlineUerRep;
     private readonly IHubContext<ChatHub, IChatClient> _chatHubContext;
 
-
     public ChatHub(ISysCacheService cache,
-        IMessageService sendMessageService,
+        ISysMessageService sysMessageService,
         SqlSugarRepository<SysOnlineUser> sysOnlineUerRep,
         IHubContext<ChatHub, IChatClient> chatHubContext)
     {
         _cache = cache;
-        _sendMessageService = sendMessageService;
+        _sysMessageService = sysMessageService;
         _sysOnlineUerRep = sysOnlineUerRep;
         _chatHubContext = chatHubContext;
     }
@@ -71,7 +70,6 @@ public class ChatHub : Hub<IChatClient>
         //onlineUsers.Add();
         //await _cache.SetAsync($"{CacheConst.KeyOnlineUser}{ Context.ConnectionId}", user);
 
-
         //await _sendMessageService.SendMessageToUserByConnectionId("asdasd但凡生得分", "下线吧", MessageTypeEnum.Offline, Context.ConnectionId);
     }
 
@@ -115,45 +113,44 @@ public class ChatHub : Hub<IChatClient>
         await _chatHubContext.Clients.Client(request.ConnectionId).ForceExist("强制下线");
     }
 
-
     /// <summary>
     /// 前端调用发送方法(发送信息给某个人)
     /// </summary>
-    /// <param name="_message"></param>
+    /// <param name="message"></param>
     /// <returns></returns>
-    public async Task ClientsSendMessage(MessageInput _message)
+    public async Task ClientsSendMessage(MessageInput message)
     {
-        await _sendMessageService.SendMessageToUser(_message.Title, _message.Message, _message.MessageType, _message.UserId);
+        await _sysMessageService.SendMessageToUser(message);
     }
 
     /// <summary>
     /// 前端调用发送方法(发送信息给所有人)
     /// </summary>
-    /// <param name="_message"></param>
+    /// <param name="message"></param>
     /// <returns></returns>
-    public async Task ClientsSendMessagetoAll(MessageInput _message)
+    public async Task ClientsSendMessagetoAll(MessageInput message)
     {
-        await _sendMessageService.SendMessageToAllUser(_message.Title, _message.Message, _message.MessageType);
+        await _sysMessageService.SendMessageToAllUser(message);
     }
 
     /// <summary>
     /// 前端调用发送方法(发送消息给除了发送人的其他人)
     /// </summary>
-    /// <param name="_message"></param>
+    /// <param name="message"></param>
     /// <returns></returns>
-    public async Task ClientsSendMessagetoOther(MessageInput _message)
+    public async Task ClientsSendMessagetoOther(MessageInput message)
     {
         // _message.userId为发送人ID
-        await _sendMessageService.SendMessageToOtherUser(_message.Title, _message.Message, _message.MessageType, _message.UserId);
+        await _sysMessageService.SendMessageToOtherUser(message);
     }
 
     /// <summary>
     /// 前端调用发送方法(发送消息给某些人)
     /// </summary>
-    /// <param name="_message"></param>
+    /// <param name="message"></param>
     /// <returns></returns>
-    public async Task ClientsSendMessagetoUsers(MessageInput _message)
+    public async Task ClientsSendMessagetoUsers(MessageInput message)
     {
-        await _sendMessageService.SendMessageToUsers(_message.Title, _message.Message, _message.MessageType, _message.UserIds);
+        await _sysMessageService.SendMessageToUsers(message);
     }
 }

+ 0 - 1
Admin.NET/Admin.NET.Core/Hub/Dto/ForceExistUserRequest.cs

@@ -2,5 +2,4 @@
 
 public class ForceExistUserRequest : ChatHubRequest
 {
-
 }

+ 0 - 1
Admin.NET/Admin.NET.Core/Hub/IChatClient.cs

@@ -18,7 +18,6 @@ public interface IChatClient
     /// <returns></returns>
     Task ReceiveMessage(object context);
 
-
     /// <summary>
     /// 在线用户变动
     /// </summary>

+ 2 - 2
Admin.NET/Admin.NET.Core/Option/PayCallBackOptions.cs

@@ -8,12 +8,12 @@ public sealed class PayCallBackOptions : IConfigurableOptions
     /// <summary>
     /// 微信支付回调
     /// </summary>
-    public string WechatPayUrl { get; set; }
+    public string WeChatPayUrl { get; set; }
 
     /// <summary>
     /// 微信退款回调
     /// </summary>
-    public string WechatRefundUrl { get; set; }
+    public string WeChatRefundUrl { get; set; }
 
     /// <summary>
     /// 支付宝支付回调

+ 3 - 3
Admin.NET/Admin.NET.Core/Option/WechatOptions.cs

@@ -3,12 +3,12 @@
 /// <summary>
 /// 微信相关配置选项
 /// </summary>
-public sealed class WechatOptions : IConfigurableOptions
+public sealed class WeChatOptions : IConfigurableOptions
 {
     //公众号
-    public string WechatAppId { get; set; }
+    public string WeChatAppId { get; set; }
 
-    public string WechatAppSecret { get; set; }
+    public string WeChatAppSecret { get; set; }
 
     public string EncodingAESKey { get; set; }
 

+ 1 - 1
Admin.NET/Admin.NET.Core/Option/WechatPayOptions.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 微信支付配置选项
 /// </summary>
-public sealed class WechatPayOptions : IConfigurableOptions
+public sealed class WeChatPayOptions : IConfigurableOptions
 {
     /// <summary>
     /// 微信公众平台AppId、开放平台AppId、小程序AppId、企业微信CorpId

+ 113 - 113
Admin.NET/Admin.NET.Core/RateLimitConfig.json

@@ -1,119 +1,119 @@
 {
-  // IP限流配置
-  "IpRateLimiting": {
-    // 例如:设置每分钟5次访问限流
-    // 当False时:每个接口都加入计数,不管你访问哪个接口,只要在一分钟内累计够5次,将禁止访问。
-    // 当True 时:当一分钟请求了5次GetData接口,则该接口将在时间段内禁止访问,但是还可以访问PostData()5次,总得来说是每个接口都有5次在这一分钟,互不干扰。
-    "EnableEndpointRateLimiting": true,
-    // 如果StackBlockedRequests设置为false,拒绝的API调用不会添加到调用次数计数器上。比如:如果客户端每秒发出3个请求并且您设置了每秒一个调用的限制,
-    // 则每分钟或每天计数器等其他限制将仅记录第一个调用,即成功的API调用。如果您希望被拒绝的API调用计入其他时间的显示(分钟,小时等),则必须设置
-    "StackBlockedRequests": false,
-    // 在RealIpHeader使用时,你的Kestrel服务器背后是一个反向代理,如果你的代理服务器使用不同的页眉然后提取客户端IP X-Real-IP使用此选项来设置它。
-    "RealIpHeader": "X-Real-IP",
-    // 将ClientIdHeader被用于提取白名单的客户端ID。如果此标头中存在客户端ID并且与ClientWhitelist中指定的值匹配,则不应用速率限制。
-    "ClientIdHeader": "X-ClientId",
-    // IP白名单:支持Ipv4和Ipv6
-    "IpWhitelist": [],
-    // 端点白名单
-    "EndpointWhitelist": [],
-    // 客户端白名单
-    "ClientWhitelist": [],
-    "QuotaExceededResponse": {
-      "Content": "{{\"code\":429,\"type\":\"error\",\"message\":\"访问过于频繁,请稍后重试!\",\"result\":null,\"extras\":null}}",
-      "ContentType": "application/json",
-      "StatusCode": 429
+    // IP限流配置
+    "IpRateLimiting": {
+        // 例如:设置每分钟5次访问限流
+        // 当False时:每个接口都加入计数,不管你访问哪个接口,只要在一分钟内累计够5次,将禁止访问。
+        // 当True 时:当一分钟请求了5次GetData接口,则该接口将在时间段内禁止访问,但是还可以访问PostData()5次,总得来说是每个接口都有5次在这一分钟,互不干扰。
+        "EnableEndpointRateLimiting": true,
+        // 如果StackBlockedRequests设置为false,拒绝的API调用不会添加到调用次数计数器上。比如:如果客户端每秒发出3个请求并且您设置了每秒一个调用的限制,
+        // 则每分钟或每天计数器等其他限制将仅记录第一个调用,即成功的API调用。如果您希望被拒绝的API调用计入其他时间的显示(分钟,小时等),则必须设置
+        "StackBlockedRequests": false,
+        // 在RealIpHeader使用时,你的Kestrel服务器背后是一个反向代理,如果你的代理服务器使用不同的页眉然后提取客户端IP X-Real-IP使用此选项来设置它。
+        "RealIpHeader": "X-Real-IP",
+        // 将ClientIdHeader被用于提取白名单的客户端ID。如果此标头中存在客户端ID并且与ClientWhitelist中指定的值匹配,则不应用速率限制。
+        "ClientIdHeader": "X-ClientId",
+        // IP白名单:支持Ipv4和Ipv6
+        "IpWhitelist": [],
+        // 端点白名单
+        "EndpointWhitelist": [],
+        // 客户端白名单
+        "ClientWhitelist": [],
+        "QuotaExceededResponse": {
+            "Content": "{{\"code\":429,\"type\":\"error\",\"message\":\"访问过于频繁,请稍后重试!\",\"result\":null,\"extras\":null}}",
+            "ContentType": "application/json",
+            "StatusCode": 429
+        },
+        // 返回状态码
+        "HttpStatusCode": 429,
+        // API规则,结尾一定要带*
+        "GeneralRules": [
+            // 1秒钟只能调用1次
+            {
+                "Endpoint": "*",
+                "Period": "1s",
+                "Limit": 10
+            },
+            // 1分钟只能调用100次
+            {
+                "Endpoint": "*",
+                "Period": "1m",
+                "Limit": 1000
+            },
+            // 1小时只能调用1000
+            {
+                "Endpoint": "*",
+                "Period": "1h",
+                "Limit": 10000
+            },
+            // 1天只能调用10000次
+            {
+                "Endpoint": "*",
+                "Period": "1d",
+                "Limit": 1000000
+            }
+        ]
+    },
+    "IpRateLimitPolicies": {
+        "IpRules": [
+            {
+                "Ip": "XXX.XXX.XXX.XXX",
+                "Rules": [
+                    {
+                        "Endpoint": "*",
+                        "Period": "1s",
+                        "Limit": 10
+                    },
+                    {
+                        "Endpoint": "*",
+                        "Period": "1m",
+                        "Limit": 1000
+                    }
+                ]
+            }
+        ]
     },
-    // 返回状态码
-    "HttpStatusCode": 429,
-    // API规则,结尾一定要带*
-    "GeneralRules": [
-      // 1秒钟只能调用1次
-      {
-        "Endpoint": "*",
-        "Period": "1s",
-        "Limit": 10
-      },
-      // 1分钟只能调用100次
-      {
-        "Endpoint": "*",
-        "Period": "1m",
-        "Limit": 1000
-      },
-      // 1小时只能调用1000
-      {
-        "Endpoint": "*",
-        "Period": "1h",
-        "Limit": 10000
-      },
-      // 1天只能调用10000次
-      {
-        "Endpoint": "*",
-        "Period": "1d",
-        "Limit": 1000000
-      }
-    ]
-  },
-  "IpRateLimitPolicies": {
-    "IpRules": [
-      {
-        "Ip": "XXX.XXX.XXX.XXX",
-        "Rules": [
-          {
-            "Endpoint": "*",
-            "Period": "1s",
-            "Limit": 10
-          },
-          {
-            "Endpoint": "*",
-            "Period": "1m",
-            "Limit": 1000
-          }
+    // 客户端限流配置
+    "ClientRateLimiting": {
+        "EnableEndpointRateLimiting": true,
+        "ClientIdHeader": "X-ClientId",
+        "EndpointWhitelist": [],
+        "ClientWhitelist": [],
+        "QuotaExceededResponse": {
+            "Content": "{{\"code\":429,\"type\":\"error\",\"message\":\"访问人数过多,请稍后重试!\",\"result\":null,\"extras\":null}}",
+            "ContentType": "application/json",
+            "StatusCode": 429
+        },
+        "HttpStatusCode": 429,
+        "GeneralRules": [
+            {
+                "Endpoint": "*",
+                "Period": "1s",
+                "Limit": 10
+            },
+            {
+                "Endpoint": "*",
+                "Period": "1m",
+                "Limit": 1000
+            }
         ]
-      }
-    ]
-  },
-  // 客户端限流配置
-  "ClientRateLimiting": {
-    "EnableEndpointRateLimiting": true,
-    "ClientIdHeader": "X-ClientId",
-    "EndpointWhitelist": [],
-    "ClientWhitelist": [],
-    "QuotaExceededResponse": {
-      "Content": "{{\"code\":429,\"type\":\"error\",\"message\":\"访问人数过多,请稍后重试!\",\"result\":null,\"extras\":null}}",
-      "ContentType": "application/json",
-      "StatusCode": 429
     },
-    "HttpStatusCode": 429,
-    "GeneralRules": [
-      {
-        "Endpoint": "*",
-        "Period": "1s",
-        "Limit": 10
-      },
-      {
-        "Endpoint": "*",
-        "Period": "1m",
-        "Limit": 1000
-      }
-    ]
-  },
-  "ClientRateLimitPolicies": {
-    "ClientRules": [
-      {
-        "ClientId": "xxx-xxx",
-        "Rules": [
-          {
-            "Endpoint": "*",
-            "Period": "1s",
-            "Limit": 10
-          },
-          {
-            "Endpoint": "*",
-            "Period": "1m",
-            "Limit": 1000
-          }
+    "ClientRateLimitPolicies": {
+        "ClientRules": [
+            {
+                "ClientId": "xxx-xxx",
+                "Rules": [
+                    {
+                        "Endpoint": "*",
+                        "Period": "1s",
+                        "Limit": 10
+                    },
+                    {
+                        "Endpoint": "*",
+                        "Period": "1m",
+                        "Limit": 1000
+                    }
+                ]
+            }
         ]
-      }
-    ]
-  }
+    }
 }

+ 3 - 3
Admin.NET/Admin.NET.Core/Service/Auth/AuthService.cs → Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -6,8 +6,8 @@ namespace Admin.NET.Core.Service;
 /// <summary>
 /// 系统登录授权服务
 /// </summary>
-[ApiDescriptionSettings(Name = "登录授权", Order = 200)]
-public class AuthService : IDynamicApiController, ITransient
+[ApiDescriptionSettings(Order = 200)]
+public class SysAuthService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysUser> _sysUserRep;
     private readonly RefreshTokenOptions _refreshTokenOptions;
@@ -18,7 +18,7 @@ public class AuthService : IDynamicApiController, ITransient
     private readonly SysUserRoleService _sysUserRoleService;
     private readonly IMemoryCache _cache;
 
-    public AuthService(SqlSugarRepository<SysUser> sysUserRep,
+    public SysAuthService(SqlSugarRepository<SysUser> sysUserRep,
         IOptions<RefreshTokenOptions> refreshTokenOptions,
         IHttpContextAccessor httpContextAccessor,
         IUserManager userManager,

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统缓存服务
 /// </summary>
-[ApiDescriptionSettings(Name = "系统缓存", Order = 190)]
+[ApiDescriptionSettings(Order = 190)]
 public class SysCacheService : ISysCacheService, IDynamicApiController, ISingleton
 {
     private readonly IDistributedCache _cache;

+ 5 - 5
Admin.NET/Admin.NET.Core/Service/CodeGen/CodeGenConfigService.cs → Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenConfigService.cs

@@ -1,14 +1,14 @@
 namespace Admin.NET.Core.Service;
 
 /// <summary>
-/// 代码生成详细配置服务
+/// 系统代码生成配置服务
 /// </summary>
-[ApiDescriptionSettings(Name = "代码生成配置", Order = 149)]
-public class CodeGenConfigService : IDynamicApiController, ITransient
+[ApiDescriptionSettings(Order = 149)]
+public class SysCodeGenConfigService : IDynamicApiController, ITransient
 {
     private readonly ISqlSugarClient _db;
 
-    public CodeGenConfigService(ISqlSugarClient db)
+    public SysCodeGenConfigService(ISqlSugarClient db)
     {
         _db = db;
     }
@@ -67,7 +67,7 @@ public class CodeGenConfigService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpGet("/sysCodeGenerateConfig/detail")]
-    public async Task<SysCodeGenConfig> Detail(CodeGenConfig input)
+    public async Task<SysCodeGenConfig> Detail([FromQuery] CodeGenConfig input)
     {
         return await _db.Queryable<SysCodeGenConfig>().FirstAsync(u => u.Id == input.Id);
     }

+ 6 - 6
Admin.NET/Admin.NET.Core/Service/CodeGen/CodeGenService.cs → Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -1,19 +1,19 @@
 namespace Admin.NET.Core.Service;
 
 /// <summary>
-/// 代码生成器服务
+/// 系统代码生成器服务
 /// </summary>
-[ApiDescriptionSettings(Name = "代码生成器", Order = 150)]
-public class CodeGenService : IDynamicApiController, ITransient
+[ApiDescriptionSettings(Order = 150)]
+public class SysCodeGenService : IDynamicApiController, ITransient
 {
     private readonly ISqlSugarClient _db;
 
-    private readonly CodeGenConfigService _codeGenConfigService;
+    private readonly SysCodeGenConfigService _codeGenConfigService;
     private readonly IViewEngine _viewEngine;
     private readonly ICommonService _commonService;
 
-    public CodeGenService(ISqlSugarClient db,
-        CodeGenConfigService codeGenConfigService,
+    public SysCodeGenService(ISqlSugarClient db,
+        SysCodeGenConfigService codeGenConfigService,
         IViewEngine viewEngine,
         ICommonService commonService)
     {

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统参数配置服务
 /// </summary>
-[ApiDescriptionSettings(Name = "系统配置", Order = 193)]
+[ApiDescriptionSettings(Order = 193)]
 public class SysConfigService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysConfig> _sysConfigRep;

+ 0 - 0
Admin.NET/Admin.NET.Core/Service/ConstSelector/Dto/SelectorDto.cs → Admin.NET/Admin.NET.Core/Service/Const/Dto/SelectorDto.cs


+ 4 - 4
Admin.NET/Admin.NET.Core/Service/ConstSelector/ConstSelectorService.cs → Admin.NET/Admin.NET.Core/Service/Const/SysConstService.cs

@@ -1,15 +1,15 @@
 namespace Admin.NET.Core.Service;
 
 /// <summary>
-/// 常量下拉框服务
+/// 系统常量服务
 /// </summary>
-[ApiDescriptionSettings(Name = "常量下拉框", Order = 189)]
+[ApiDescriptionSettings(Order = 189)]
 [AllowAnonymous]
-public class ConstSelectorService : IDynamicApiController, ITransient
+public class SysConstService : IDynamicApiController, ITransient
 {
     private readonly ISysCacheService _sysCacheService;
 
-    public ConstSelectorService(ISysCacheService sysCacheService)
+    public SysConstService(ISysCacheService sysCacheService)
     {
         _sysCacheService = sysCacheService;
     }

+ 4 - 4
Admin.NET/Admin.NET.Core/Service/DataBase/DataBaseManager.cs → Admin.NET/Admin.NET.Core/Service/DataBase/SysDataBaseService.cs

@@ -1,15 +1,15 @@
 namespace Admin.NET.Core.Service;
 
 /// <summary>
-/// 数据库管理服务
+/// 系统数据库管理服务
 /// </summary>
-[ApiDescriptionSettings(Name = "数据库管理", Order = 145)]
-public class DataBaseManager : IDynamicApiController, ITransient
+[ApiDescriptionSettings(Order = 145)]
+public class SysDataBaseService : IDynamicApiController, ITransient
 {
     private readonly ISqlSugarClient _db;
     private readonly IViewEngine _viewEngine;
 
-    public DataBaseManager(ISqlSugarClient db, IViewEngine viewEngine)
+    public SysDataBaseService(ISqlSugarClient db, IViewEngine viewEngine)
     {
         _db = db;
         _viewEngine = viewEngine;

+ 0 - 0
Admin.NET/Admin.NET.Core/Service/DataResources/Dto/DataResourceInput.cs → Admin.NET/Admin.NET.Core/Service/DataResource/Dto/DataResourceInput.cs


+ 1 - 1
Admin.NET/Admin.NET.Core/Service/DataResources/SysDataResourceService.cs → Admin.NET/Admin.NET.Core/Service/DataResource/SysDataResourceService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统数据资源服务
 /// </summary>
-[ApiDescriptionSettings(Name = "系统数据资源", Order = 189)]
+[ApiDescriptionSettings(Order = 189)]
 public class SysDataResourceService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysDataResource> _sysDataResourceRep;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统字典值服务
 /// </summary>
-[ApiDescriptionSettings(Name = "系统字典值", Order = 191)]
+[ApiDescriptionSettings(Order = 191)]
 [AllowAnonymous]
 public class SysDictDataService : IDynamicApiController, ITransient
 {

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统字典类型服务
 /// </summary>
-[ApiDescriptionSettings(Name = "系统字典", Order = 192)]
+[ApiDescriptionSettings(Order = 192)]
 [AllowAnonymous]
 public class SysDictTypeService : IDynamicApiController, ITransient
 {

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs

@@ -5,7 +5,7 @@ namespace Admin.NET.Core.Service;
 /// <summary>
 /// 系统文件服务
 /// </summary>
-[ApiDescriptionSettings(Name = "文件管理", Order = 194)]
+[ApiDescriptionSettings(Order = 194)]
 public class SysFileService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysFile> _sysFileRep;

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Logging/SysLogDiffService.cs

@@ -1,9 +1,9 @@
 namespace Admin.NET.Core.Service;
 
 /// <summary>
-/// 差异日志服务
+/// 系统差异日志服务
 /// </summary>
-[ApiDescriptionSettings(Name = "差异日志", Order = 180)]
+[ApiDescriptionSettings(Order = 180)]
 public class SysLogDiffService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysLogDiff> _sysLogDiffRep;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Logging/SysLogExService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统异常日志服务
 /// </summary>
-[ApiDescriptionSettings(Name = "异常日志", Order = 178)]
+[ApiDescriptionSettings(Order = 178)]
 public class SysLogExService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysLogEx> _sysLogExRep;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Logging/SysLogOpService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统操作日志服务
 /// </summary>
-[ApiDescriptionSettings(Name = "操作日志", Order = 179)]
+[ApiDescriptionSettings(Order = 179)]
 public class SysLogOpService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysLogOp> _sysLogOpRep;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Logging/SysLogVisService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统访问日志服务
 /// </summary>
-[ApiDescriptionSettings(Name = "访问日志", Order = 180)]
+[ApiDescriptionSettings(Order = 180)]
 public class SysLogVisService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysLogVis> _sysLogVisRep;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs

@@ -3,7 +3,7 @@ namespace Admin.NET.Core.Service;
 /// <summary>
 /// 系统菜单服务
 /// </summary>
-[ApiDescriptionSettings(Name = "系统菜单", Order = 195)]
+[ApiDescriptionSettings(Order = 195)]
 public class SysMenuService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysMenu> _sysMenuRep;

+ 0 - 0
Admin.NET/Admin.NET.Core/Hub/Dto/MessageInput.cs → Admin.NET/Admin.NET.Core/Service/Message/Dto/MessageInput.cs


+ 0 - 50
Admin.NET/Admin.NET.Core/Service/Message/IMessageService.cs

@@ -1,50 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-public interface IMessageService
-{
-    /// <summary>
-    /// 发送消息给某个人
-    /// </summary>
-    /// <param name="title">发送标题</param>
-    /// <param name="message">发送内容</param>
-    /// <param name="userId">接收人</param>
-    /// <param name="type">消息类型</param>
-    /// <returns></returns>
-    Task SendMessageToUser(string title, string message, MessageTypeEnum type, long userId);
-
-    /// <summary>
-    /// 发送消息给某些人
-    /// </summary>
-    /// <param name="title">发送标题</param>
-    /// <param name="message">发送内容</param>
-    /// <param name="userId">接收人列表</param>
-    /// <param name="type">消息类型</param>
-    /// <returns></returns>
-    Task SendMessageToUsers(string title, string message, MessageTypeEnum type, List<long> userId);
-
-    /// <summary>
-    /// 发送消息给所有人
-    /// </summary>
-    /// <param name="title">发送标题</param>
-    /// <param name="message">发送内容</param>
-    /// <param name="type">消息类型</param>
-    /// <returns></returns>
-    Task SendMessageToAllUser(string title, string message, MessageTypeEnum type);
-
-    /// <summary>
-    /// 发送消息给除了发送人的其他人
-    /// </summary>
-    /// <param name="title">发送标题</param>
-    /// <param name="message">发送内容</param>
-    /// <param name="userId">发送人</param>
-    /// <param name="type">消息类型</param>
-    /// <returns></returns>
-    Task SendMessageToOtherUser(string title, string message, MessageTypeEnum type, long userId);
-
-    /// <summary>
-    /// 发送邮件
-    /// </summary>
-    /// <param name="message"></param>
-    /// <returns></returns>
-    Task SendEmail(string message);
-}

+ 39 - 0
Admin.NET/Admin.NET.Core/Service/Message/ISysMessageService.cs

@@ -0,0 +1,39 @@
+namespace Admin.NET.Core.Service;
+
+public interface ISysMessageService
+{
+    /// <summary>
+    /// 发送消息给所有人
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    Task SendMessageToAllUser(MessageInput input);
+
+    /// <summary>
+    /// 发送消息给某个人
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    Task SendMessageToUser(MessageInput input);
+
+    /// <summary>
+    /// 发送消息给某些人
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    Task SendMessageToUsers(MessageInput input);
+
+    /// <summary>
+    /// 发送消息给除了发送人的其他人
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    Task SendMessageToOtherUser(MessageInput input);
+
+    /// <summary>
+    /// 发送邮件
+    /// </summary>
+    /// <param name="message"></param>
+    /// <returns></returns>
+    Task SendEmail(string message);
+}

+ 27 - 38
Admin.NET/Admin.NET.Core/Service/Message/MessageService.cs → Admin.NET/Admin.NET.Core/Service/Message/SysMessageService.cs

@@ -4,10 +4,10 @@ using NETCore.MailKit.Core;
 namespace Admin.NET.Core.Service;
 
 /// <summary>
-/// 消息发送服务
+/// 系统消息发送服务
 /// </summary>
-[ApiDescriptionSettings(Name = "消息发送", Order = 101)]
-public class MessageService : IMessageService, IDynamicApiController, ITransient
+[ApiDescriptionSettings(Order = 101)]
+public class SysMessageService : ISysMessageService, IDynamicApiController, ITransient
 {
     private readonly ISysCacheService _sysCacheService;
     private readonly IHubContext<ChatHub, IChatClient> _chatHubContext;
@@ -15,7 +15,7 @@ public class MessageService : IMessageService, IDynamicApiController, ITransient
     private readonly EmailOptions _emailOptions;
     private readonly IEmailService _emailService;
 
-    public MessageService(ISysCacheService sysCacheService,
+    public SysMessageService(ISysCacheService sysCacheService,
         IHubContext<ChatHub, IChatClient> chatHubContext,
         IOptions<EmailOptions> emailOptions,
         IEmailService emailService)
@@ -29,84 +29,73 @@ public class MessageService : IMessageService, IDynamicApiController, ITransient
     /// <summary>
     /// 发送消息给所有人
     /// </summary>
-    /// <param name="title">发送标题</param>
-    /// <param name="message">发送内容</param>
-    /// <param name="type">消息类型</param>
+    /// <param name="input"></param>
     /// <returns></returns>
-    [HttpGet("sysMessage/allUser")]
-    public async Task SendMessageToAllUser(string title, string message, MessageTypeEnum type)
+    [HttpPost("sysMessage/allUser")]
+    public async Task SendMessageToAllUser(MessageInput input)
     {
-        await _chatHubContext.Clients.All.ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
+        await _chatHubContext.Clients.All.ReceiveMessage(input);
     }
 
     /// <summary>
     /// 发送消息给除了发送人的其他人
     /// </summary>
-    /// <param name="title">发送标题</param>
-    /// <param name="message">发送内容</param>
-    /// <param name="userId">发送人</param>
-    /// <param name="type">消息类型</param>
+    /// <param name="input"></param>
     /// <returns></returns>
-    [HttpGet("sysMessage/otherUser")]
-    public async Task SendMessageToOtherUser(string title, string message, MessageTypeEnum type, long userId)
+    [HttpPost("sysMessage/otherUser")]
+    public async Task SendMessageToOtherUser(MessageInput input)
     {
         var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
 
-        var user = onlineuserlist.Where(x => x.UserId == userId).ToList();
+        var user = onlineuserlist.Where(x => x.UserId == input.UserId).ToList();
         if (user != null)
         {
-            await _chatHubContext.Clients.AllExcept(user[0].ConnectionId).ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
+            await _chatHubContext.Clients.AllExcept(user[0].ConnectionId).ReceiveMessage(input);
         }
     }
 
     /// <summary>
     /// 发送消息给某个人
     /// </summary>
-    /// <param name="title">发送标题</param>
-    /// <param name="message">发送内容</param>
-    /// <param name="userId">接收人</param>
-    /// <param name="type">消息类型</param>
+    /// <param name="input"></param>
     /// <returns></returns>
-    [HttpGet("sysMessage/user")]
-    public async Task SendMessageToUser(string title, string message, MessageTypeEnum type, long userId)
+    [HttpPost("sysMessage/user")]
+    public async Task SendMessageToUser(MessageInput input)
     {
         var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
 
-        var user = onlineuserlist.Where(x => x.UserId == userId).ToList();
-        if (user != null)
+        var user = onlineuserlist.Where(x => x.UserId == input.UserId).ToList();
+        if (user == null) return;
+
+        foreach (var item in user)
         {
-            foreach (var item in user)
-            {
-                await _chatHubContext.Clients.Client(item.ConnectionId).ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
-            }
+            await _chatHubContext.Clients.Client(item.ConnectionId).ReceiveMessage(input);
         }
     }
 
     /// <summary>
     /// 发送消息给某些人
     /// </summary>
-    /// <param name="title">发送标题</param>
-    /// <param name="message">发送内容</param>
-    /// <param name="userId">接收人列表</param>
-    /// <param name="type">消息类型</param>
+    /// <param name="input"></param>
     /// <returns></returns>
-    [HttpGet("sysMessage/users")]
-    public async Task SendMessageToUsers(string title, string message, MessageTypeEnum type, List<long> userId)
+    [HttpPost("sysMessage/users")]
+    public async Task SendMessageToUsers(MessageInput input)
     {
         var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
 
         var userlist = new List<string>();
         foreach (var item in onlineuserlist)
         {
-            if (userId.Contains(item.UserId))
+            if (input.UserIds.Contains(item.UserId))
                 userlist.Add(item.ConnectionId);
         }
-        await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
+        await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(input);
     }
 
     /// <summary>
     /// 发送邮件
     /// </summary>
+    /// <param name="message"></param>
     /// <returns></returns>
     [HttpPost("/email/send")]
     public async Task SendEmail(string message)

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统通知公告服务
 /// </summary>
-[ApiDescriptionSettings(Name = "通知公告", Order = 100)]
+[ApiDescriptionSettings(Order = 100)]
 public class SysNoticeService : ISysNoticeService, IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysNotice> _sysNoticeRep;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeUserService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统通知公告用户
 /// </summary>
-[ApiDescriptionSettings(Name = "通知公告用户", Order = 100)]
+[ApiDescriptionSettings(Order = 100)]
 public class SysNoticeUserService : ISysNoticeUserService, ITransient
 {
     private readonly SqlSugarRepository<SysNoticeUser> _sysNoticeUserRep;  // 通知公告用户表仓储

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/OnlineUser/SysOnlineUserService.cs

@@ -5,7 +5,7 @@ namespace Admin.NET.Core.Service;
 /// <summary>
 /// 系统在线用户服务
 /// </summary>
-[ApiDescriptionSettings(Name = "在线用户", Order = 100)]
+[ApiDescriptionSettings(Order = 100)]
 public class SysOnlineUserService : ISysOnlineUserService, IDynamicApiController, ITransient
 {
     private readonly ISysCacheService _sysCacheService;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs

@@ -3,7 +3,7 @@ namespace Admin.NET.Core.Service;
 /// <summary>
 /// 系统机构服务
 /// </summary>
-[ApiDescriptionSettings(Name = "系统机构", Order = 197)]
+[ApiDescriptionSettings(Order = 197)]
 public class SysOrgService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysOrg> _sysOrgRep;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Pos/SysPosService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统职位服务
 /// </summary>
-[ApiDescriptionSettings(Name = "系统职位", Order = 196)]
+[ApiDescriptionSettings(Order = 196)]
 public class SysPosService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysPos> _sysPosRep;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统角色服务
 /// </summary>
-[ApiDescriptionSettings(Name = "系统角色", Order = 198)]
+[ApiDescriptionSettings(Order = 198)]
 public class SysRoleService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysRole> _sysRoleRep;

+ 4 - 4
Admin.NET/Admin.NET.Core/Service/Server/ServerService.cs → Admin.NET/Admin.NET.Core/Service/Server/SysServerService.cs

@@ -1,12 +1,12 @@
 namespace Admin.NET.Core.Service;
 
 /// <summary>
-/// 服务器监控服务
+/// 系统服务器监控服务
 /// </summary>
-[ApiDescriptionSettings(Name = "服务器监控", Order = 185)]
-public class ServerService : IDynamicApiController, ITransient
+[ApiDescriptionSettings(Order = 185)]
+public class SysServerService : IDynamicApiController, ITransient
 {
-    public ServerService()
+    public SysServerService()
     {
     }
 

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs

@@ -1,9 +1,9 @@
 namespace Admin.NET.Core.Service;
 
 /// <summary>
-/// 租户管理服务
+/// 系统租户管理服务
 /// </summary>
-[ApiDescriptionSettings(Name = "租户管理", Order = 140)]
+[ApiDescriptionSettings(Order = 140)]
 public class SysTenantService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysTenant> _tenantRep;

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Timer/SysTimerService.cs

@@ -1,9 +1,9 @@
 namespace Admin.NET.Core.Service;
 
 /// <summary>
-/// 定时任务服务
+/// 系统定时任务服务
 /// </summary>
-[ApiDescriptionSettings(Name = "定时任务", Order = 188)]
+[ApiDescriptionSettings(Order = 188)]
 public class SysTimerService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysTimer> _sysTimerRep;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统用户服务
 /// </summary>
-[ApiDescriptionSettings(Name = "系统用户", Order = 199)]
+[ApiDescriptionSettings(Order = 199)]
 public class SysUserService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysUser> _sysUserRep;

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatInput.cs

@@ -13,7 +13,7 @@ public class GenAuthUrlInput
     public string Scope { get; set; }
 }
 
-public class WechatOAuth2Input
+public class WeChatOAuth2Input
 {
     /// <summary>
     /// Code
@@ -22,7 +22,7 @@ public class WechatOAuth2Input
     public string Code { get; set; }
 }
 
-public class WechatUserLogin
+public class WeChatUserLogin
 {
     /// <summary>
     /// OpenId

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatPayInput.cs

@@ -1,6 +1,6 @@
 namespace Admin.NET.Core.Service;
 
-public class WechatPayTransactionInput
+public class WeChatPayTransactionInput
 {
     /// <summary>
     /// OpenId
@@ -28,7 +28,7 @@ public class WechatPayTransactionInput
     public string GoodsTag { get; set; }
 }
 
-public class WechatPayParaInput
+public class WeChatPayParaInput
 {
     /// <summary>
     /// 订单Id

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatPayOutput.cs

@@ -1,6 +1,6 @@
 namespace Admin.NET.Core.Service;
 
-public class WechatPayOutput
+public class WeChatPayOutput
 {
     /// <summary>
     /// OpenId

+ 6 - 6
Admin.NET/Admin.NET.Core/Service/WeChat/WechatApiHttpClient.cs

@@ -6,9 +6,9 @@
 [ApiDescriptionSettings(false)]
 public partial class WeChatApiHttpClient : ISingleton
 {
-    public readonly WechatOptions _weChatOptions;
+    public readonly WeChatOptions _weChatOptions;
 
-    public WeChatApiHttpClient(IOptions<WechatOptions> weChatOptions)
+    public WeChatApiHttpClient(IOptions<WeChatOptions> weChatOptions)
     {
         _weChatOptions = weChatOptions.Value;
     }
@@ -17,15 +17,15 @@ public partial class WeChatApiHttpClient : ISingleton
     /// 微信公众号
     /// </summary>
     /// <returns></returns>
-    public WechatApiClient CreateWechatClient()
+    public WechatApiClient CreateWeChatClient()
     {
-        if (string.IsNullOrEmpty(_weChatOptions.WechatAppId) || string.IsNullOrEmpty(_weChatOptions.WechatAppSecret))
+        if (string.IsNullOrEmpty(_weChatOptions.WeChatAppId) || string.IsNullOrEmpty(_weChatOptions.WeChatAppSecret))
             throw Oops.Oh("微信公众号配置错误");
 
         var wechatApiClient = new WechatApiClient(new WechatApiClientOptions()
         {
-            AppId = _weChatOptions.WechatAppId,
-            AppSecret = _weChatOptions.WechatAppSecret,
+            AppId = _weChatOptions.WeChatAppId,
+            AppSecret = _weChatOptions.WeChatAppSecret,
         });
 
         wechatApiClient.Configure(settings =>

+ 47 - 47
Admin.NET/Admin.NET.Core/Service/WeChat/WechatPayService.cs

@@ -3,22 +3,22 @@
 /// <summary>
 /// 微信支付服务
 /// </summary>
-[ApiDescriptionSettings(Name = "微信支付", Order = 99)]
+[ApiDescriptionSettings(Order = 99)]
 public class WeChatPayService : IDynamicApiController, ITransient
 {
-    private readonly SqlSugarRepository<WechatPay> _wechatPayUserRep;
+    private readonly SqlSugarRepository<WeChatPay> _weChatPayUserRep;
 
-    private readonly WechatPayOptions _wechatPayOptions;
-    public readonly WechatTenpayClient WechatTenpayClient;
+    private readonly WeChatPayOptions _weChatPayOptions;
+    public readonly WechatTenpayClient WeChatTenpayClient;
     private readonly PayCallBackOptions _payCallBackOptions;
 
-    public WeChatPayService(SqlSugarRepository<WechatPay> wechatPayUserRep,
-        IOptions<WechatPayOptions> wechatPayOptions,
+    public WeChatPayService(SqlSugarRepository<WeChatPay> weChatPayUserRep,
+        IOptions<WeChatPayOptions> weChatPayOptions,
         IOptions<PayCallBackOptions> payCallBackOptions)
     {
-        _wechatPayUserRep = wechatPayUserRep;
-        _wechatPayOptions = wechatPayOptions.Value;
-        WechatTenpayClient = CreateTenpayClient();
+        _weChatPayUserRep = weChatPayUserRep;
+        _weChatPayOptions = weChatPayOptions.Value;
+        WeChatTenpayClient = CreateTenpayClient();
         _payCallBackOptions = payCallBackOptions.Value;
     }
 
@@ -30,10 +30,10 @@ public class WeChatPayService : IDynamicApiController, ITransient
     {
         var tenpayClientOptions = new WechatTenpayClientOptions()
         {
-            MerchantId = _wechatPayOptions.MerchantId,
-            MerchantV3Secret = _wechatPayOptions.MerchantV3Secret,
-            MerchantCertificateSerialNumber = _wechatPayOptions.MerchantCertificateSerialNumber,
-            MerchantCertificatePrivateKey = CommonUtil.GetRootPathFileText(_wechatPayOptions.MerchantCertificatePrivateKey),
+            MerchantId = _weChatPayOptions.MerchantId,
+            MerchantV3Secret = _weChatPayOptions.MerchantV3Secret,
+            MerchantCertificateSerialNumber = _weChatPayOptions.MerchantCertificateSerialNumber,
+            MerchantCertificatePrivateKey = CommonUtil.GetRootPathFileText(_weChatPayOptions.MerchantCertificatePrivateKey),
             PlatformCertificateManager = new InMemoryCertificateManager()
         };
         return new WechatTenpayClient(tenpayClientOptions);
@@ -45,37 +45,37 @@ public class WeChatPayService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost("/weChatPay/genPayPara")]
-    public dynamic GenerateParametersForJsapiPay(WechatPayParaInput input)
+    public dynamic GenerateParametersForJsapiPay(WeChatPayParaInput input)
     {
-        return WechatTenpayClient.GenerateParametersForJsapiPayRequest(_wechatPayOptions.AppId, input.PrepayId);
+        return WeChatTenpayClient.GenerateParametersForJsapiPayRequest(_weChatPayOptions.AppId, input.PrepayId);
     }
 
     /// <summary>
     /// 微信支付统一下单获取Id(商户直连)
     /// </summary>
     [HttpPost("/weChatPay/payTransaction")]
-    public async Task<dynamic> CreatePayTransaction([FromBody] WechatPayTransactionInput input)
+    public async Task<dynamic> CreatePayTransaction([FromBody] WeChatPayTransactionInput input)
     {
         var request = new CreatePayTransactionJsapiRequest()
         {
             OutTradeNumber = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(100, 1000), // YitIdHelper.NextId(), // 订单号
-            AppId = _wechatPayOptions.AppId,
+            AppId = _weChatPayOptions.AppId,
             Description = input.Description,
             Attachment = input.Attachment,
             GoodsTag = input.GoodsTag,
             ExpireTime = DateTimeOffset.Now.AddMinutes(10),
-            NotifyUrl = _payCallBackOptions.WechatPayUrl,
+            NotifyUrl = _payCallBackOptions.WeChatPayUrl,
             Amount = new CreatePayTransactionJsapiRequest.Types.Amount() { Total = input.Total },
             Payer = new CreatePayTransactionJsapiRequest.Types.Payer() { OpenId = input.OpenId }
         };
-        var response = await WechatTenpayClient.ExecuteCreatePayTransactionJsapiAsync(request);
+        var response = await WeChatTenpayClient.ExecuteCreatePayTransactionJsapiAsync(request);
         if (!response.IsSuccessful())
             throw Oops.Oh(response.ErrorMessage);
 
         // 保存订单信息
-        var wechatPay = new WechatPay()
+        var wechatPay = new WeChatPay()
         {
-            MerchantId = _wechatPayOptions.MerchantId,
+            MerchantId = _weChatPayOptions.MerchantId,
             OutTradeNumber = request.OutTradeNumber,
             Description = input.Description,
             Attachment = input.Attachment,
@@ -83,7 +83,7 @@ public class WeChatPayService : IDynamicApiController, ITransient
             Total = input.Total,
             OpenId = input.OpenId
         };
-        await _wechatPayUserRep.InsertAsync(wechatPay);
+        await _weChatPayUserRep.InsertAsync(wechatPay);
 
         return new
         {
@@ -96,34 +96,34 @@ public class WeChatPayService : IDynamicApiController, ITransient
     /// 微信支付统一下单获取Id(服务商模式)
     /// </summary>
     [HttpPost("/weChatPay/payPartnerTransaction")]
-    public async Task<dynamic> CreatePayPartnerTransaction([FromBody] WechatPayTransactionInput input)
+    public async Task<dynamic> CreatePayPartnerTransaction([FromBody] WeChatPayTransactionInput input)
     {
         var request = new CreatePayPartnerTransactionJsapiRequest()
         {
             OutTradeNumber = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(100, 1000), // YitIdHelper.NextId(), // 订单号
-            AppId = _wechatPayOptions.AppId,
-            MerchantId = _wechatPayOptions.MerchantId,
-            SubAppId = _wechatPayOptions.AppId,
-            SubMerchantId = _wechatPayOptions.MerchantId,
+            AppId = _weChatPayOptions.AppId,
+            MerchantId = _weChatPayOptions.MerchantId,
+            SubAppId = _weChatPayOptions.AppId,
+            SubMerchantId = _weChatPayOptions.MerchantId,
             Description = input.Description,
             Attachment = input.Attachment,
             GoodsTag = input.GoodsTag,
             ExpireTime = DateTimeOffset.Now.AddMinutes(10),
-            NotifyUrl = _payCallBackOptions.WechatPayUrl,
+            NotifyUrl = _payCallBackOptions.WeChatPayUrl,
             Amount = new CreatePayPartnerTransactionJsapiRequest.Types.Amount() { Total = input.Total },
             Payer = new CreatePayPartnerTransactionJsapiRequest.Types.Payer() { OpenId = input.OpenId }
         };
-        var response = await WechatTenpayClient.ExecuteCreatePayPartnerTransactionJsapiAsync(request);
+        var response = await WeChatTenpayClient.ExecuteCreatePayPartnerTransactionJsapiAsync(request);
         if (!response.IsSuccessful())
             throw Oops.Oh(response.ErrorMessage);
 
         // 保存订单信息
-        var wechatPay = new WechatPay()
+        var wechatPay = new WeChatPay()
         {
-            AppId = _wechatPayOptions.AppId,
-            MerchantId = _wechatPayOptions.MerchantId,
-            SubAppId = _wechatPayOptions.AppId,
-            SubMerchantId = _wechatPayOptions.MerchantId,
+            AppId = _weChatPayOptions.AppId,
+            MerchantId = _weChatPayOptions.MerchantId,
+            SubAppId = _weChatPayOptions.AppId,
+            SubMerchantId = _weChatPayOptions.MerchantId,
             OutTradeNumber = request.OutTradeNumber,
             Description = input.Description,
             Attachment = input.Attachment,
@@ -131,7 +131,7 @@ public class WeChatPayService : IDynamicApiController, ITransient
             Total = input.Total,
             OpenId = input.OpenId
         };
-        await _wechatPayUserRep.InsertAsync(wechatPay);
+        await _weChatPayUserRep.InsertAsync(wechatPay);
 
         return new
         {
@@ -146,9 +146,9 @@ public class WeChatPayService : IDynamicApiController, ITransient
     /// <param name="tradeId"></param>
     /// <returns></returns>
     [HttpGet("/weChatPay/payInfo")]
-    public async Task<WechatPay> GetWeChatPayInfo(string tradeId)
+    public async Task<WeChatPay> GetWeChatPayInfo(string tradeId)
     {
-        return await _wechatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == tradeId);
+        return await _weChatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == tradeId);
     }
 
     /// <summary>
@@ -157,20 +157,20 @@ public class WeChatPayService : IDynamicApiController, ITransient
     /// <returns></returns>
     [HttpPost("/notify/weChatPay/payCallBack")]
     [AllowAnonymous]
-    public async Task<WechatPayOutput> WeChatPayCallBack()
+    public async Task<WeChatPayOutput> WeChatPayCallBack()
     {
         using var ms = new MemoryStream();
         await App.HttpContext.Request.Body.CopyToAsync(ms);
         var b = ms.ToArray();
         var callbackJson = Encoding.UTF8.GetString(b);
 
-        var callbackModel = WechatTenpayClient.DeserializeEvent(callbackJson);
+        var callbackModel = WeChatTenpayClient.DeserializeEvent(callbackJson);
         if ("TRANSACTION.SUCCESS".Equals(callbackModel.EventType))
         {
-            var callbackResource = WechatTenpayClient.DecryptEventResource<TransactionResource>(callbackModel);
+            var callbackResource = WeChatTenpayClient.DecryptEventResource<TransactionResource>(callbackModel);
 
             // 修改订单支付状态
-            var wechatPay = await _wechatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == callbackResource.OutTradeNumber
+            var wechatPay = await _weChatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == callbackResource.OutTradeNumber
                 && u.MerchantId == callbackResource.MerchantId);
             if (wechatPay == null) return null;
             //wechatPay.OpenId = callbackResource.Payer.OpenId; // 支付者标识
@@ -185,9 +185,9 @@ public class WeChatPayService : IDynamicApiController, ITransient
             wechatPay.PayerTotal = callbackResource.Amount.PayerTotal; // 用户支付金额
             wechatPay.SuccessTime = callbackResource.SuccessTime; // 支付完成时间
 
-            await _wechatPayUserRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
+            await _weChatPayUserRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
 
-            return new WechatPayOutput()
+            return new WeChatPayOutput()
             {
                 Total = wechatPay.Total,
                 Attachment = wechatPay.Attachment,
@@ -211,13 +211,13 @@ public class WeChatPayService : IDynamicApiController, ITransient
         var b = ms.ToArray();
         var callbackJson = Encoding.UTF8.GetString(b);
 
-        var callbackModel = WechatTenpayClient.DeserializeEvent(callbackJson);
+        var callbackModel = WeChatTenpayClient.DeserializeEvent(callbackJson);
         if ("TRANSACTION.SUCCESS".Equals(callbackModel.EventType))
         {
-            var callbackResource = WechatTenpayClient.DecryptEventResource<PartnerTransactionResource>(callbackModel);
+            var callbackResource = WeChatTenpayClient.DecryptEventResource<PartnerTransactionResource>(callbackModel);
 
             // 修改订单支付状态
-            var wechatPay = await _wechatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == callbackResource.OutTradeNumber
+            var wechatPay = await _weChatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == callbackResource.OutTradeNumber
                 && u.MerchantId == callbackResource.MerchantId);
             if (wechatPay == null) return;
             //wechatPay.OpenId = callbackResource.Payer.OpenId; // 支付者标识
@@ -232,7 +232,7 @@ public class WeChatPayService : IDynamicApiController, ITransient
             wechatPay.PayerTotal = callbackResource.Amount.PayerTotal; // 用户支付金额
             wechatPay.SuccessTime = callbackResource.SuccessTime; // 支付完成时间
 
-            await _wechatPayUserRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
+            await _weChatPayUserRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
         }
     }
 }

+ 21 - 21
Admin.NET/Admin.NET.Core/Service/WeChat/WechatService.cs

@@ -3,17 +3,17 @@
 /// <summary>
 /// 微信公众号服务
 /// </summary>
-[ApiDescriptionSettings(Name = "微信公众号", Order = 100)]
-public class WechatService : IDynamicApiController, ITransient
+[ApiDescriptionSettings(Order = 100)]
+public class WeChatService : IDynamicApiController, ITransient
 {
-    private readonly SqlSugarRepository<WechatUser> _wechatUserRep;
-    private readonly WechatApiClient _wechatApiClient;
+    private readonly SqlSugarRepository<WeChatUser> _weChatUserRep;
+    private readonly WechatApiClient _weChatApiClient;
 
-    public WechatService(SqlSugarRepository<WechatUser> wechatUserRep,
-        WeChatApiHttpClient wechatApiHttpClient)
+    public WeChatService(SqlSugarRepository<WeChatUser> weChatUserRep,
+        WeChatApiHttpClient weChatApiHttpClient)
     {
-        _wechatUserRep = wechatUserRep;
-        _wechatApiClient = wechatApiHttpClient.CreateWechatClient();
+        _weChatUserRep = weChatUserRep;
+        _weChatApiClient = weChatApiHttpClient.CreateWeChatClient();
     }
 
     /// <summary>
@@ -25,7 +25,7 @@ public class WechatService : IDynamicApiController, ITransient
     [AllowAnonymous]
     public string GenAuthUrl(GenAuthUrlInput input)
     {
-        return _wechatApiClient.GenerateParameterizedUrlForConnectOAuth2Authorize(input.RedirectUrl, input.Scope);
+        return _weChatApiClient.GenerateParameterizedUrlForConnectOAuth2Authorize(input.RedirectUrl, input.Scope);
     }
 
     /// <summary>
@@ -34,17 +34,17 @@ public class WechatService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     [HttpPost("/weChat/snsOAuth2")]
     [AllowAnonymous]
-    public async Task<string> LoginOAuth2([Required] WechatOAuth2Input input)
+    public async Task<string> LoginOAuth2([Required] WeChatOAuth2Input input)
     {
         var reqOAuth2 = new SnsOAuth2AccessTokenRequest()
         {
             Code = input.Code,
         };
-        var resOAuth2 = await _wechatApiClient.ExecuteSnsOAuth2AccessTokenAsync(reqOAuth2);
+        var resOAuth2 = await _weChatApiClient.ExecuteSnsOAuth2AccessTokenAsync(reqOAuth2);
         if (resOAuth2.ErrorCode != (int)WeChatReturnCodeEnum.请求成功)
             throw Oops.Oh(resOAuth2.ErrorMessage + resOAuth2.ErrorCode);
 
-        var wxUser = await _wechatUserRep.GetFirstAsync(p => p.OpenId == resOAuth2.OpenId);
+        var wxUser = await _weChatUserRep.GetFirstAsync(p => p.OpenId == resOAuth2.OpenId);
         if (wxUser == null)
         {
             var reqUserInfo = new SnsUserInfoRequest()
@@ -52,17 +52,17 @@ public class WechatService : IDynamicApiController, ITransient
                 OpenId = resOAuth2.OpenId,
                 AccessToken = resOAuth2.AccessToken,
             };
-            var resUserInfo = await _wechatApiClient.ExecuteSnsUserInfoAsync(reqUserInfo);
-            wxUser = resUserInfo.Adapt<WechatUser>();
+            var resUserInfo = await _weChatApiClient.ExecuteSnsUserInfoAsync(reqUserInfo);
+            wxUser = resUserInfo.Adapt<WeChatUser>();
             wxUser.Avatar = resUserInfo.HeadImageUrl;
             wxUser.NickName = resUserInfo.Nickname;
-            wxUser = await _wechatUserRep.AsInsertable(wxUser).ExecuteReturnEntityAsync();
+            wxUser = await _weChatUserRep.AsInsertable(wxUser).ExecuteReturnEntityAsync();
         }
         else
         {
             wxUser.AccessToken = resOAuth2.AccessToken;
             wxUser.RefreshToken = resOAuth2.RefreshToken;
-            await _wechatUserRep.AsUpdateable(wxUser).IgnoreColumns(true).ExecuteCommandAsync();
+            await _weChatUserRep.AsUpdateable(wxUser).IgnoreColumns(true).ExecuteCommandAsync();
         }
 
         return resOAuth2.OpenId;
@@ -75,9 +75,9 @@ public class WechatService : IDynamicApiController, ITransient
     /// <returns></returns>
     [HttpPost("/weChat/openIdLogin")]
     [AllowAnonymous]
-    public async Task<dynamic> WechatUserLogin(WechatUserLogin input)
+    public async Task<dynamic> WechatUserLogin(WeChatUserLogin input)
     {
-        var wxUser = await _wechatUserRep.GetFirstAsync(p => p.OpenId == input.OpenId);
+        var wxUser = await _weChatUserRep.GetFirstAsync(p => p.OpenId == input.OpenId);
         if (wxUser == null)
             throw Oops.Oh("微信登录");
         return new
@@ -100,14 +100,14 @@ public class WechatService : IDynamicApiController, ITransient
     [HttpPost("/weChat/genConfigPara")]
     public async Task<dynamic> GenConfigPara(SignatureInput input)
     {
-        var resCgibinToken = await _wechatApiClient.ExecuteCgibinTokenAsync(new CgibinTokenRequest());
+        var resCgibinToken = await _weChatApiClient.ExecuteCgibinTokenAsync(new CgibinTokenRequest());
         var request = new CgibinTicketGetTicketRequest()
         {
             AccessToken = resCgibinToken.AccessToken
         };
-        var response = await _wechatApiClient.ExecuteCgibinTicketGetTicketAsync(request);
+        var response = await _weChatApiClient.ExecuteCgibinTicketGetTicketAsync(request);
         if (!response.IsSuccessful())
             throw Oops.Oh(response.ErrorMessage);
-        return _wechatApiClient.GenerateParametersForJSSDKConfig(response.Ticket, input.Url);
+        return _weChatApiClient.GenerateParametersForJSSDKConfig(response.Ticket, input.Url);
     }
 }

+ 1 - 1
Admin.NET/Admin.NET.UnitTest/Admin.NET.UnitTest.csproj

@@ -8,7 +8,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Furion.Pure.Xunit" Version="4.3.2" />
+    <PackageReference Include="Furion.Pure.Xunit" Version="4.3.3" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.8" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.0" />
     <PackageReference Include="xunit" Version="2.4.2" />

+ 2 - 2
Admin.NET/Admin.NET.Web.Core/ProjectOptions.cs

@@ -20,8 +20,8 @@ public static class ProjectOptions
         services.AddConfigurableOptions<CacheOptions>();
         services.AddConfigurableOptions<OSSProviderOptions>();
         services.AddConfigurableOptions<UploadOptions>();
-        services.AddConfigurableOptions<WechatOptions>();
-        services.AddConfigurableOptions<WechatPayOptions>();
+        services.AddConfigurableOptions<WeChatOptions>();
+        services.AddConfigurableOptions<WeChatPayOptions>();
         services.AddConfigurableOptions<PayCallBackOptions>();
         services.AddConfigurableOptions<CodeGenOptions>();
         services.AddConfigurableOptions<EmailOptions>();

+ 26 - 26
Admin.NET/Admin.NET.Web.Entry/Properties/launchSettings.json

@@ -1,30 +1,30 @@
 {
-  "iisSettings": {
-    "windowsAuthentication": false,
-    "anonymousAuthentication": true,
-    "iisExpress": {
-      "applicationUrl": "https://localhost:44326",
-      "sslPort": 44326
-    }
-  },
-  "profiles": {
-    "IIS Express": {
-      "commandName": "IISExpress",
-      "launchBrowser": true,
-      "launchUrl": "",
-      "environmentVariables": {
-        "ASPNETCORE_ENVIRONMENT": "Development"
-      }
+    "iisSettings": {
+        "windowsAuthentication": false,
+        "anonymousAuthentication": true,
+        "iisExpress": {
+            "applicationUrl": "https://localhost:44326",
+            "sslPort": 44326
+        }
     },
-    "Admin.NET.Web.Entry": {
-      "commandName": "Project",
-      "dotnetRunMessages": "true",
-      "launchBrowser": true,
-      "launchUrl": "",
-      "applicationUrl": "https://localhost:44326;http://localhost:5000",
-      "environmentVariables": {
-        "ASPNETCORE_ENVIRONMENT": "Development"
-      }
+    "profiles": {
+        "IIS Express": {
+            "commandName": "IISExpress",
+            "launchBrowser": true,
+            "launchUrl": "",
+            "environmentVariables": {
+                "ASPNETCORE_ENVIRONMENT": "Development"
+            }
+        },
+        "Admin.NET.Web.Entry": {
+            "commandName": "Project",
+            "dotnetRunMessages": "true",
+            "launchBrowser": true,
+            "launchUrl": "",
+            "applicationUrl": "https://localhost:44326;http://localhost:5000",
+            "environmentVariables": {
+                "ASPNETCORE_ENVIRONMENT": "Development"
+            }
+        }
     }
-  }
 }

+ 23 - 22
Admin.NET/Admin.NET.Web.Entry/appsettings.Development.json

@@ -1,26 +1,27 @@
 {
-  "$schema": "https://gitee.com/dotnetchina/Furion/raw/net6/schemas/v3/furion-schema.json",
+    "$schema": "https://gitee.com/dotnetchina/Furion/raw/net6/schemas/v3/furion-schema.json",
 
-  "Logging": {
-    "LogLevel": {
-      "Default": "Information",
-      "Microsoft": "Warning",
-      "Microsoft.Hosting.Lifetime": "Information"
-    },
-    "File": {
-      "FileName": "logs/info.log",
-      "Append": true,
-      "MinimumLevel": "Information",
-      "FileSizeLimitBytes": 5120,
-      "MaxRollingFiles": 100
-    },
-    "Database": {
-      "MinimumLevel": "Information"
-    },
-    "Monitor": {
-      "GlobalEnabled": true, // 启用全局拦截日志
-      "IncludeOfMethods": [], // 拦截特定方法,当GlobalEnabled=false有效
-      "ExcludeOfMethods": [] // 排除特定方法,当GlobalEnabled=true有效
+    "Logging": {
+        "LogLevel": {
+            "Default": "Information",
+            "Microsoft": "Warning",
+            "Microsoft.Hosting.Lifetime": "Information"
+        },
+        "File": {
+            "FileName": "logs/info.log",
+            "Append": true,
+            "MinimumLevel": "Information",
+            "FileSizeLimitBytes": 5120,
+            "MaxRollingFiles": 100
+        },
+        "Database": {
+            "MinimumLevel": "Information"
+        },
+        "Monitor": {
+            "GlobalEnabled": true, // 鍚�敤鍏ㄥ眬鎷︽埅鏃ュ織
+            "IncludeOfMethods": [], // 鎷︽埅鐗瑰畾鏂规硶锛屽綋GlobalEnabled=false鏈夋晥
+            "ExcludeOfMethods": [], // 鎺掗櫎鐗瑰畾鏂规硶锛屽綋GlobalEnabled=true鏈夋晥
+            "BahLogLevel": "Information" // Oops.Oh 鍜� Oops.Bah 涓氬姟鏃ュ織杈撳嚭绾у埆
+        }
     }
-  }
 }

+ 25 - 24
Admin.NET/Admin.NET.Web.Entry/appsettings.json

@@ -1,29 +1,30 @@
 {
-  "$schema": "https://gitee.com/dotnetchina/Furion/raw/net6/schemas/v3/furion-schema.json",
+    "$schema": "https://gitee.com/dotnetchina/Furion/raw/net6/schemas/v3/furion-schema.json",
 
-  "Urls": "https://*:5005",
+    "Urls": "https://*:5005",
 
-  "Logging": {
-    "LogLevel": {
-      "Default": "Information",
-      "Microsoft": "Warning",
-      "Microsoft.Hosting.Lifetime": "Information"
+    "Logging": {
+        "LogLevel": {
+            "Default": "Information",
+            "Microsoft": "Warning",
+            "Microsoft.Hosting.Lifetime": "Information"
+        },
+        "File": {
+            "FileName": "logs/info.log",
+            "Append": true,
+            "MinimumLevel": "Information",
+            "FileSizeLimitBytes": 5120,
+            "MaxRollingFiles": 30
+        },
+        "Database": {
+            "MinimumLevel": "Information"
+        },
+        "Monitor": {
+            "GlobalEnabled": true, // 启用全局拦截日志
+            "IncludeOfMethods": [], // 拦截特定方法,当GlobalEnabled=false有效
+            "ExcludeOfMethods": [], // 排除特定方法,当GlobalEnabled=true有效
+            "BahLogLevel": "Information" // Oops.Oh 和 Oops.Bah 业务日志输出级别
+        }
     },
-    "File": {
-      "FileName": "logs/info.log",
-      "Append": true,
-      "MinimumLevel": "Information",
-      "FileSizeLimitBytes": 5120,
-      "MaxRollingFiles": 30
-    },
-    "Database": {
-      "MinimumLevel": "Information"
-    },
-    "Monitor": {
-      "GlobalEnabled": true, // 启用全局拦截日志
-      "IncludeOfMethods": [], // 拦截特定方法,当GlobalEnabled=false有效
-      "ExcludeOfMethods": [] // 排除特定方法,当GlobalEnabled=true有效
-    }
-  },
-  "AllowedHosts": "*"
+    "AllowedHosts": "*"
 }

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно