Browse Source

1、增加全局库表字段名称驼峰转下划线模式 2、升级nuget包及其他优化

zuohuaijun 3 years ago
parent
commit
8fedb9f128
50 changed files with 472 additions and 452 deletions
  1. 3 2
      Admin.NET/Admin.NET.Application/Configuration/Database.json
  2. 5 5
      Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj
  3. 117 112
      Admin.NET/Admin.NET.Core/Admin.NET.Core.xml
  4. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs
  5. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysCodeGenConfig.cs
  6. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysConfig.cs
  7. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysDictData.cs
  8. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysDictType.cs
  9. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysFile.cs
  10. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysJobCluster.cs
  11. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysJobDetail.cs
  12. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysJobTrigger.cs
  13. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysLogAudit.cs
  14. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysLogDiff.cs
  15. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysLogEx.cs
  16. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysLogOp.cs
  17. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysLogVis.cs
  18. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysMenu.cs
  19. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysNotice.cs
  20. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysNoticeUser.cs
  21. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysOnlineUser.cs
  22. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysOrg.cs
  23. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysPos.cs
  24. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysRegion.cs
  25. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysRole.cs
  26. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysRoleMenu.cs
  27. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysRoleOrg.cs
  28. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysTenant.cs
  29. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysUser.cs
  30. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysUserExtOrg.cs
  31. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysUserRole.cs
  32. 3 3
      Admin.NET/Admin.NET.Core/Entity/SysWechatPay.cs
  33. 2 2
      Admin.NET/Admin.NET.Core/Entity/SysWechatUser.cs
  34. 1 1
      Admin.NET/Admin.NET.Core/Enum/WeChatReturnCodeEnum.cs
  35. 5 0
      Admin.NET/Admin.NET.Core/Option/DbConnectionOptions.cs
  36. 2 2
      Admin.NET/Admin.NET.Core/Option/PayCallBackOptions.cs
  37. 3 3
      Admin.NET/Admin.NET.Core/Option/WechatOptions.cs
  38. 1 1
      Admin.NET/Admin.NET.Core/Option/WechatPayOptions.cs
  39. 126 126
      Admin.NET/Admin.NET.Core/Service/Job/DbJobPersistence.cs
  40. 2 2
      Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatInput.cs
  41. 2 2
      Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatPayInput.cs
  42. 1 1
      Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatPayOutput.cs
  43. 2 2
      Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatUserInput.cs
  44. 54 54
      Admin.NET/Admin.NET.Core/Service/WeChat/SysWechatPayService.cs
  45. 25 25
      Admin.NET/Admin.NET.Core/Service/WeChat/SysWechatService.cs
  46. 64 0
      Admin.NET/Admin.NET.Core/Service/WeChat/SysWechatUserService.cs
  47. 0 64
      Admin.NET/Admin.NET.Core/Service/WeChat/WeChatUserService.cs
  48. 11 11
      Admin.NET/Admin.NET.Core/Service/WeChat/WechatApiHttpClient.cs
  49. 13 4
      Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs
  50. 2 2
      Admin.NET/Admin.NET.Web.Core/ProjectOptions.cs

+ 3 - 2
Admin.NET/Admin.NET.Application/Configuration/Database.json

@@ -2,13 +2,14 @@
     "$schema": "https://gitee.com/dotnetchina/Furion/raw/net6/schemas/v3/furion-schema.json",
 
     "DbConnection": {
-        // 具体配置见SqlSugar官网
+        // 具体配置见SqlSugar官网(第一个为默认库,不需要设置ConfigId)
         "ConnectionConfigs": [
             {
                 "DbType": "Sqlite", // MySql、SqlServer、Sqlite、Oracle、PostgreSQL、Dm、Kdbndp、Oscar、MySqlConnector、Access
                 "ConnectionString": "DataSource=./Admin.NET.db",
                 "EnableInitDb": true, // 启用库表初始化
-                "EnableDiffLog": false // 启用库表差异日志
+                "EnableDiffLog": false, // 启用库表差异日志
+                "EnableUnderLine": true // 启用驼峰转下划线
             }
         ]
     }

+ 5 - 5
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -17,9 +17,9 @@
     <PackageReference Include="AngleSharp" Version="0.17.1" />
     <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
     <PackageReference Include="DotNetCore.Natasha.CSharp" Version="5.0.2" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.8.3.3" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.8.3.3" />
-    <PackageReference Include="Furion.Pure" Version="4.8.3.3" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.8.3.4" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.8.3.4" />
+    <PackageReference Include="Furion.Pure" Version="4.8.3.4" />
     <PackageReference Include="Lazy.Captcha.Core" Version="1.1.6" />
     <PackageReference Include="Magicodes.IE.Excel" Version="2.7.2" />
     <PackageReference Include="Magicodes.IE.Pdf" Version="2.7.2" />
@@ -30,11 +30,11 @@
     <PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.1.9" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.21.1" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="2.15.0" />
-    <PackageReference Include="SqlSugarCore" Version="5.1.3.38" />
+    <PackageReference Include="SqlSugarCore" Version="5.1.3.39" />
     <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.23" />
     <PackageReference Include="UAParser" Version="3.1.47" />
     <PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
-    <PackageReference Include="Masuit.Tools.Core" Version="2.5.8.2" />
+    <PackageReference Include="Masuit.Tools.Core" Version="2.5.8.3" />
   </ItemGroup>
 
   <ItemGroup>

+ 117 - 112
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -1822,217 +1822,217 @@
             角色
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.WeChatPay">
+        <member name="T:Admin.NET.Core.SysWechatPay">
             <summary>
             系统微信支付表
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.MerchantId">
+        <member name="P:Admin.NET.Core.SysWechatPay.MerchantId">
             <summary>
             微信商户号
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.AppId">
+        <member name="P:Admin.NET.Core.SysWechatPay.AppId">
             <summary>
             服务商AppId
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.OutTradeNumber">
+        <member name="P:Admin.NET.Core.SysWechatPay.OutTradeNumber">
             <summary>
             商户订单号
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.TransactionId">
+        <member name="P:Admin.NET.Core.SysWechatPay.TransactionId">
             <summary>
             支付订单号
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.TradeType">
+        <member name="P:Admin.NET.Core.SysWechatPay.TradeType">
             <summary>
             交易类型
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.TradeState">
+        <member name="P:Admin.NET.Core.SysWechatPay.TradeState">
             <summary>
             交易状态
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.TradeStateDescription">
+        <member name="P:Admin.NET.Core.SysWechatPay.TradeStateDescription">
             <summary>
             交易状态描述
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.BankType">
+        <member name="P:Admin.NET.Core.SysWechatPay.BankType">
             <summary>
             付款银行类型
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.Total">
+        <member name="P:Admin.NET.Core.SysWechatPay.Total">
             <summary>
             订单总金额
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.PayerTotal">
+        <member name="P:Admin.NET.Core.SysWechatPay.PayerTotal">
             <summary>
             用户支付金额
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.SuccessTime">
+        <member name="P:Admin.NET.Core.SysWechatPay.SuccessTime">
             <summary>
             支付完成时间
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.ExpireTime">
+        <member name="P:Admin.NET.Core.SysWechatPay.ExpireTime">
             <summary>
             交易结束时间
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.Description">
+        <member name="P:Admin.NET.Core.SysWechatPay.Description">
             <summary>
             商品描述
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.Scene">
+        <member name="P:Admin.NET.Core.SysWechatPay.Scene">
             <summary>
             场景信息
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.Attachment">
+        <member name="P:Admin.NET.Core.SysWechatPay.Attachment">
             <summary>
             附加数据
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.GoodsTag">
+        <member name="P:Admin.NET.Core.SysWechatPay.GoodsTag">
             <summary>
             优惠标记
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.Settlement">
+        <member name="P:Admin.NET.Core.SysWechatPay.Settlement">
             <summary>
             结算信息
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.NotifyUrl">
+        <member name="P:Admin.NET.Core.SysWechatPay.NotifyUrl">
             <summary>
             回调通知地址
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.Remark">
+        <member name="P:Admin.NET.Core.SysWechatPay.Remark">
             <summary>
             备注
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.OpenId">
+        <member name="P:Admin.NET.Core.SysWechatPay.OpenId">
             <summary>
             微信OpenId标识
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.WeChatUser">
+        <member name="P:Admin.NET.Core.SysWechatPay.SysWechatUser">
             <summary>
             关联微信用户
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.SubMerchantId">
+        <member name="P:Admin.NET.Core.SysWechatPay.SubMerchantId">
             <summary>
             子商户号
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.SubAppId">
+        <member name="P:Admin.NET.Core.SysWechatPay.SubAppId">
             <summary>
             子商户AppId
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPay.SubOpenId">
+        <member name="P:Admin.NET.Core.SysWechatPay.SubOpenId">
             <summary>
             子商户唯一标识
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.WeChatUser">
+        <member name="T:Admin.NET.Core.SysWechatUser">
             <summary>
             系统微信用户表
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.UserId">
+        <member name="P:Admin.NET.Core.SysWechatUser.UserId">
             <summary>
             系统用户Id
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.SysUser">
+        <member name="P:Admin.NET.Core.SysWechatUser.SysUser">
             <summary>
             系统用户
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.PlatformType">
+        <member name="P:Admin.NET.Core.SysWechatUser.PlatformType">
             <summary>
             平台类型
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.OpenId">
+        <member name="P:Admin.NET.Core.SysWechatUser.OpenId">
             <summary>
             OpenId
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.SessionKey">
+        <member name="P:Admin.NET.Core.SysWechatUser.SessionKey">
             <summary>
             缓存key
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.UnionId">
+        <member name="P:Admin.NET.Core.SysWechatUser.UnionId">
             <summary>
             UnionId
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.NickName">
+        <member name="P:Admin.NET.Core.SysWechatUser.NickName">
             <summary>
             昵称
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.Avatar">
+        <member name="P:Admin.NET.Core.SysWechatUser.Avatar">
             <summary>
             头像
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.Mobile">
+        <member name="P:Admin.NET.Core.SysWechatUser.Mobile">
             <summary>
             手机号码
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.Sex">
+        <member name="P:Admin.NET.Core.SysWechatUser.Sex">
             <summary>
             性别
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.Language">
+        <member name="P:Admin.NET.Core.SysWechatUser.Language">
             <summary>
             语言
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.City">
+        <member name="P:Admin.NET.Core.SysWechatUser.City">
             <summary>
             城市
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.Province">
+        <member name="P:Admin.NET.Core.SysWechatUser.Province">
             <summary>
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.Country">
+        <member name="P:Admin.NET.Core.SysWechatUser.Country">
             <summary>
             国家
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.AccessToken">
+        <member name="P:Admin.NET.Core.SysWechatUser.AccessToken">
             <summary>
             AccessToken
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.RefreshToken">
+        <member name="P:Admin.NET.Core.SysWechatUser.RefreshToken">
             <summary>
             RefreshToken
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.ExpiresIn">
+        <member name="P:Admin.NET.Core.SysWechatUser.ExpiresIn">
             <summary>
             过期时间
             </summary>
@@ -2977,49 +2977,49 @@
             库隔离
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.WeChatReturnCodeEnum">
+        <member name="T:Admin.NET.Core.WechatReturnCodeEnum">
             <summary>
             微信开发返回码
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.WeChatReturnCodeEnum.不合法的凭证类型">
+        <member name="F:Admin.NET.Core.WechatReturnCodeEnum.不合法的凭证类型">
             <summary>
             <para>公众号:不合法的凭证类型</para>
             <para>小程序:暂无生成权限</para>
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.WeChatReturnCodeEnum.不合法的APPID">
+        <member name="F:Admin.NET.Core.WechatReturnCodeEnum.不合法的APPID">
             <summary>
             <para>微信:不合法的APPID</para>
             <para>小程序:生成权限被封禁</para>
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.WeChatReturnCodeEnum.输入参数有误">
+        <member name="F:Admin.NET.Core.WechatReturnCodeEnum.输入参数有误">
             <summary>
             <para>公众号:输入参数有误</para>
             <para>小程序:参数expire_time填写错误</para>
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.WeChatReturnCodeEnum.用户拒绝接受消息">
+        <member name="F:Admin.NET.Core.WechatReturnCodeEnum.用户拒绝接受消息">
             <summary>[小程序订阅消息]用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系</summary>
         </member>
-        <member name="F:Admin.NET.Core.WeChatReturnCodeEnum.模板参数不准确">
+        <member name="F:Admin.NET.Core.WechatReturnCodeEnum.模板参数不准确">
             <summary>[小程序订阅消息]模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错</summary>
         </member>
-        <member name="F:Admin.NET.Core.WeChatReturnCodeEnum.客服帐号名长度超过限制">
+        <member name="F:Admin.NET.Core.WechatReturnCodeEnum.客服帐号名长度超过限制">
             <summary>
             客服帐号名长度超过限制(仅允许10个英文字符,不包括@及@后的公众号的微信号)(invalid kf_acount length)
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.WeChatReturnCodeEnum.客服帐号名包含非法字符">
+        <member name="F:Admin.NET.Core.WechatReturnCodeEnum.客服帐号名包含非法字符">
             <summary>
             客服帐号名包含非法字符(仅允许英文+数字)(illegal character in kf_account)
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.WeChatReturnCodeEnum.客服帐号个数超过限制">
+        <member name="F:Admin.NET.Core.WechatReturnCodeEnum.客服帐号个数超过限制">
             <summary>客服帐号个数超过限制(10个客服账号)(kf_account count exceeded)</summary>
         </member>
-        <member name="F:Admin.NET.Core.WeChatReturnCodeEnum.签名错误">
+        <member name="F:Admin.NET.Core.WechatReturnCodeEnum.签名错误">
             <summary>
             小程序为“签名错误”。对应公众号: 87009, “errmsg” : “reply is not exists” //该回复不存在
             </summary>
@@ -3628,6 +3628,11 @@
             启用库表差异日志
             </summary>
         </member>
+        <member name="P:Admin.NET.Core.DbConnectionConfig.EnableUnderLine">
+            <summary>
+            启用驼峰转下划线
+            </summary>
+        </member>
         <member name="T:Admin.NET.Core.EmailOptions">
             <summary>
             邮件配置选项
@@ -3679,12 +3684,12 @@
             支付回调配置选项
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.PayCallBackOptions.WeChatPayUrl">
+        <member name="P:Admin.NET.Core.PayCallBackOptions.WechatPayUrl">
             <summary>
             微信支付回调
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.PayCallBackOptions.WeChatRefundUrl">
+        <member name="P:Admin.NET.Core.PayCallBackOptions.WechatRefundUrl">
             <summary>
             微信退款回调
             </summary>
@@ -3759,42 +3764,42 @@
             上传格式
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.WeChatOptions">
+        <member name="T:Admin.NET.Core.WechatOptions">
             <summary>
             微信相关配置选项
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.WeChatPayOptions">
+        <member name="T:Admin.NET.Core.WechatPayOptions">
             <summary>
             微信支付配置选项
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPayOptions.AppId">
+        <member name="P:Admin.NET.Core.WechatPayOptions.AppId">
             <summary>
             微信公众平台AppId、开放平台AppId、小程序AppId、企业微信CorpId
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPayOptions.MerchantId">
+        <member name="P:Admin.NET.Core.WechatPayOptions.MerchantId">
              <summary>
             商户平台的商户号
              </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPayOptions.MerchantV3Secret">
+        <member name="P:Admin.NET.Core.WechatPayOptions.MerchantV3Secret">
             <summary>
             商户平台的APIv3密钥
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPayOptions.MerchantCertificateSerialNumber">
+        <member name="P:Admin.NET.Core.WechatPayOptions.MerchantCertificateSerialNumber">
             <summary>
             商户平台的证书序列号
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPayOptions.MerchantCertificatePrivateKey">
+        <member name="P:Admin.NET.Core.WechatPayOptions.MerchantCertificatePrivateKey">
             <summary>
             商户平台的API证书私钥(apiclient_key.pem文件内容)
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatPayOptions.RsaPublicKey">
+        <member name="P:Admin.NET.Core.WechatPayOptions.RsaPublicKey">
             <summary>
             RSA公钥 仅调用"企业付款到银行卡API"时使用
             </summary>
@@ -6810,12 +6815,12 @@
             Scope
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatOAuth2Input.Code">
+        <member name="P:Admin.NET.Core.Service.WechatOAuth2Input.Code">
             <summary>
             Code
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatUserLogin.OpenId">
+        <member name="P:Admin.NET.Core.Service.WechatUserLogin.OpenId">
             <summary>
             OpenId
             </summary>
@@ -6825,194 +6830,194 @@
             Url
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatPayTransactionInput.OpenId">
+        <member name="P:Admin.NET.Core.Service.WechatPayTransactionInput.OpenId">
             <summary>
             OpenId
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatPayTransactionInput.Total">
+        <member name="P:Admin.NET.Core.Service.WechatPayTransactionInput.Total">
             <summary>
             订单金额
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatPayTransactionInput.Description">
+        <member name="P:Admin.NET.Core.Service.WechatPayTransactionInput.Description">
             <summary>
             商品描述
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatPayTransactionInput.Attachment">
+        <member name="P:Admin.NET.Core.Service.WechatPayTransactionInput.Attachment">
             <summary>
             附加数据
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatPayTransactionInput.GoodsTag">
+        <member name="P:Admin.NET.Core.Service.WechatPayTransactionInput.GoodsTag">
             <summary>
             优惠标记
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatPayParaInput.PrepayId">
+        <member name="P:Admin.NET.Core.Service.WechatPayParaInput.PrepayId">
             <summary>
             订单Id
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatPayOutput.OpenId">
+        <member name="P:Admin.NET.Core.Service.WechatPayOutput.OpenId">
             <summary>
             OpenId
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatPayOutput.Total">
+        <member name="P:Admin.NET.Core.Service.WechatPayOutput.Total">
             <summary>
             订单金额
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatPayOutput.Attachment">
+        <member name="P:Admin.NET.Core.Service.WechatPayOutput.Attachment">
             <summary>
             附加数据
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatPayOutput.GoodsTag">
+        <member name="P:Admin.NET.Core.Service.WechatPayOutput.GoodsTag">
             <summary>
             优惠标记
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatUserInput.NickName">
+        <member name="P:Admin.NET.Core.Service.WechatUserInput.NickName">
             <summary>
             昵称
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.WeChatUserInput.Mobile">
+        <member name="P:Admin.NET.Core.Service.WechatUserInput.Mobile">
             <summary>
             手机号码
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.Service.WeChatApiHttpClient">
-            <summary>
-            微信API客户端
-            </summary>
-        </member>
-        <member name="M:Admin.NET.Core.Service.WeChatApiHttpClient.CreateWeChatClient">
-            <summary>
-            微信公众号
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.WeChatApiHttpClient.CreateWxOpenClient">
-            <summary>
-            微信小程序
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="T:Admin.NET.Core.Service.WeChatPayService">
+        <member name="T:Admin.NET.Core.Service.SysWechatPayService">
             <summary>
             微信支付服务
             </summary>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatPayService.CreateTenpayClient">
+        <member name="M:Admin.NET.Core.Service.SysWechatPayService.CreateTenpayClient">
             <summary>
             初始化微信支付客户端
             </summary>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatPayService.GenerateParametersForJsapiPay(Admin.NET.Core.Service.WeChatPayParaInput)">
+        <member name="M:Admin.NET.Core.Service.SysWechatPayService.GenerateParametersForJsapiPay(Admin.NET.Core.Service.WechatPayParaInput)">
             <summary>
             生成JSAPI调起支付所需参数
             </summary>
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatPayService.CreatePayTransaction(Admin.NET.Core.Service.WeChatPayTransactionInput)">
+        <member name="M:Admin.NET.Core.Service.SysWechatPayService.CreatePayTransaction(Admin.NET.Core.Service.WechatPayTransactionInput)">
             <summary>
             微信支付统一下单获取Id(商户直连)
             </summary>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatPayService.CreatePayPartnerTransaction(Admin.NET.Core.Service.WeChatPayTransactionInput)">
+        <member name="M:Admin.NET.Core.Service.SysWechatPayService.CreatePayPartnerTransaction(Admin.NET.Core.Service.WechatPayTransactionInput)">
             <summary>
             微信支付统一下单获取Id(服务商模式)
             </summary>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatPayService.GetWeChatPayInfo(System.String)">
+        <member name="M:Admin.NET.Core.Service.SysWechatPayService.GetWechatPayInfo(System.String)">
             <summary>
             获取支付订单详情
             </summary>
             <param name="tradeId"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatPayService.WeChatPayCallBack">
+        <member name="M:Admin.NET.Core.Service.SysWechatPayService.WechatPayCallBack">
             <summary>
             微信支付成功回调(商户直连)
             </summary>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatPayService.WeChatPayPartnerCallBack">
+        <member name="M:Admin.NET.Core.Service.SysWechatPayService.WechatPayPartnerCallBack">
             <summary>
             微信支付成功回调(服务商模式)
             </summary>
             <returns></returns>
         </member>
-        <member name="T:Admin.NET.Core.Service.WeChatService">
+        <member name="T:Admin.NET.Core.Service.SysWechatService">
             <summary>
             微信公众号服务
             </summary>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatService.GenAuthUrl(Admin.NET.Core.Service.GenAuthUrlInput)">
+        <member name="M:Admin.NET.Core.Service.SysWechatService.GenAuthUrl(Admin.NET.Core.Service.GenAuthUrlInput)">
             <summary>
             生成网页授权Url
             </summary>
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatService.LoginOAuth2(Admin.NET.Core.Service.WeChatOAuth2Input)">
+        <member name="M:Admin.NET.Core.Service.SysWechatService.LoginOAuth2(Admin.NET.Core.Service.WechatOAuth2Input)">
             <summary>
             授权登录(Code换取OpenId)
             </summary>
             <param name="input"></param>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatService.WechatUserLogin(Admin.NET.Core.Service.WeChatUserLogin)">
+        <member name="M:Admin.NET.Core.Service.SysWechatService.WechatUserLogin(Admin.NET.Core.Service.WechatUserLogin)">
             <summary>
             微信用户登录
             </summary>
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatService.GenConfigPara(Admin.NET.Core.Service.SignatureInput)">
+        <member name="M:Admin.NET.Core.Service.SysWechatService.GenConfigPara(Admin.NET.Core.Service.SignatureInput)">
             <summary>
             获取配置签名参数(wx.config)
             </summary>
             <returns></returns>
         </member>
-        <member name="T:Admin.NET.Core.Service.WeChatUserService">
+        <member name="T:Admin.NET.Core.Service.SysWechatUserService">
             <summary>
             微信账号服务
             </summary>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatUserService.GetWeChatUserPage(Admin.NET.Core.Service.WeChatUserInput)">
+        <member name="M:Admin.NET.Core.Service.SysWechatUserService.GetWechatUserPage(Admin.NET.Core.Service.WechatUserInput)">
             <summary>
             获取微信用户列表
             </summary>
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatUserService.AddWeChatUser(Admin.NET.Core.WeChatUser)">
+        <member name="M:Admin.NET.Core.Service.SysWechatUserService.AddWechatUser(Admin.NET.Core.SysWechatUser)">
             <summary>
             增加微信用户
             </summary>
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatUserService.UpdateWeChatUser(Admin.NET.Core.WeChatUser)">
+        <member name="M:Admin.NET.Core.Service.SysWechatUserService.UpdateWechatUser(Admin.NET.Core.SysWechatUser)">
             <summary>
             更新微信用户
             </summary>
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.WeChatUserService.DeleteWeChatUser(Admin.NET.Core.Service.DeleteWeChatUserInput)">
+        <member name="M:Admin.NET.Core.Service.SysWechatUserService.DeleteWechatUser(Admin.NET.Core.Service.DeleteWechatUserInput)">
             <summary>
             删除微信用户
             </summary>
             <param name="input"></param>
             <returns></returns>
         </member>
+        <member name="T:Admin.NET.Core.Service.WechatApiHttpClient">
+            <summary>
+            微信API客户端
+            </summary>
+        </member>
+        <member name="M:Admin.NET.Core.Service.WechatApiHttpClient.CreateWechatClient">
+            <summary>
+            微信公众号
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.Service.WechatApiHttpClient.CreateWxOpenClient">
+            <summary>
+            微信小程序
+            </summary>
+            <returns></returns>
+        </member>
         <member name="T:Admin.NET.Core.ExportLogDto">
             <summary>
             导出日志数据

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 代码生成表
 /// </summary>
-[SugarTable("sys_code_gen", "代码生成表")]
+[SugarTable(null, "代码生成表")]
 public class SysCodeGen : EntityBase
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 代码生成字段配置表
 /// </summary>
-[SugarTable("sys_code_gen_config", "代码生成字段配置表")]
+[SugarTable(null, "代码生成字段配置表")]
 public class SysCodeGenConfig : EntityBase
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统参数配置表
 /// </summary>
-[SugarTable("sys_config", "系统参数配置表")]
+[SugarTable(null, "系统参数配置表")]
 public class SysConfig : EntityBase
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统字典值表
 /// </summary>
-[SugarTable("sys_dict_data", "系统字典值表")]
+[SugarTable(null, "系统字典值表")]
 public class SysDictData : EntityBase
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统字典类型表
 /// </summary>
-[SugarTable("sys_dict_type", "系统字典类型表")]
+[SugarTable(null, "系统字典类型表")]
 public class SysDictType : EntityBase
 {
     /// <summary>

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

@@ -3,7 +3,7 @@ namespace Admin.NET.Core;
 /// <summary>
 /// 系统文件表
 /// </summary>
-[SugarTable("sys_file", "系统文件表")]
+[SugarTable(null, "系统文件表")]
 public class SysFile : EntityBase
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统作业集群表
 /// </summary>
-[SugarTable("sys_job_cluster", "系统作业集群表")]
+[SugarTable(null, "系统作业集群表")]
 public class SysJobCluster : EntityBaseId
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统作业信息表
 /// </summary>
-[SugarTable("sys_job_detail", "系统作业信息表")]
+[SugarTable(null, "系统作业信息表")]
 public class SysJobDetail : EntityBaseId
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统作业触发器表
 /// </summary>
-[SugarTable("sys_job_trigger", "系统作业触发器表")]
+[SugarTable(null, "系统作业触发器表")]
 public class SysJobTrigger : EntityBaseId
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统审计日志表
 /// </summary>
-[SugarTable("sys_log_audit", "系统审计日志表")]
+[SugarTable(null, "系统审计日志表")]
 public class SysLogAudit : EntityBase
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统差异日志表
 /// </summary>
-[SugarTable("sys_log_diff", "系统差异日志表")]
+[SugarTable(null, "系统差异日志表")]
 public class SysLogDiff : EntityBase
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统异常日志表
 /// </summary>
-[SugarTable("sys_log_ex", "系统异常日志表")]
+[SugarTable(null, "系统异常日志表")]
 public class SysLogEx : EntityTenant
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统操作日志表
 /// </summary>
-[SugarTable("sys_log_op", "系统操作日志表")]
+[SugarTable(null, "系统操作日志表")]
 public class SysLogOp : EntityTenant
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统访问日志表
 /// </summary>
-[SugarTable("sys_log_vis", "系统访问日志表")]
+[SugarTable(null, "系统访问日志表")]
 public class SysLogVis : EntityTenant
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统菜单表
 /// </summary>
-[SugarTable("sys_menu", "系统菜单表")]
+[SugarTable(null, "系统菜单表")]
 public class SysMenu : EntityBase
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统通知公告表
 /// </summary>
-[SugarTable("sys_notice", "系统通知公告表")]
+[SugarTable(null, "系统通知公告表")]
 public class SysNotice : EntityBase
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统通知公告用户表
 /// </summary>
-[SugarTable("sys_notice_user", "系统通知公告用户表")]
+[SugarTable(null, "系统通知公告用户表")]
 public class SysNoticeUser
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统在线用户表
 /// </summary>
-[SugarTable("sys_online_user", "系统在线用户表")]
+[SugarTable(null, "系统在线用户表")]
 public class SysOnlineUser : EntityTenantId
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统机构表
 /// </summary>
-[SugarTable("sys_org", "系统机构表")]
+[SugarTable(null, "系统机构表")]
 public class SysOrg : EntityTenant
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统职位表
 /// </summary>
-[SugarTable("sys_pos", "系统职位表")]
+[SugarTable(null, "系统职位表")]
 public class SysPos : EntityTenant
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统行政地区表
 /// </summary>
-[SugarTable("sys_region", "系统行政地区表")]
+[SugarTable(null, "系统行政地区表")]
 public class SysRegion : EntityBaseId
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统角色表
 /// </summary>
-[SugarTable("sys_role", "系统角色表")]
+[SugarTable(null, "系统角色表")]
 public class SysRole : EntityTenant
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统角色菜单表
 /// </summary>
-[SugarTable("sys_role_menu", "系统角色菜单表")]
+[SugarTable(null, "系统角色菜单表")]
 public class SysRoleMenu : EntityBaseId
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统角色机构表
 /// </summary>
-[SugarTable("sys_role_org", "系统角色机构表")]
+[SugarTable(null, "系统角色机构表")]
 public class SysRoleOrg : EntityBaseId
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统租户表
 /// </summary>
-[SugarTable("sys_tenant", "系统租户表")]
+[SugarTable(null, "系统租户表")]
 public class SysTenant : EntityBase
 {
     /// <summary>

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

@@ -3,7 +3,7 @@ namespace Admin.NET.Core;
 /// <summary>
 /// 系统用户表
 /// </summary>
-[SugarTable("sys_user", "系统用户表")]
+[SugarTable(null, "系统用户表")]
 public class SysUser : EntityTenant
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统用户扩展机构表
 /// </summary>
-[SugarTable("sys_user_extorg", "系统用户扩展机构表")]
+[SugarTable(null, "系统用户扩展机构表")]
 public class SysUserExtOrg : EntityBaseId
 {
     /// <summary>

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

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统用户角色表
 /// </summary>
-[SugarTable("sys_user_role", "系统用户角色表")]
+[SugarTable(null, "系统用户角色表")]
 public class SysUserRole : EntityBaseId
 {
     /// <summary>

+ 3 - 3
Admin.NET/Admin.NET.Core/Entity/WeChatPay.cs → Admin.NET/Admin.NET.Core/Entity/SysWechatPay.cs

@@ -3,8 +3,8 @@
 /// <summary>
 /// 系统微信支付表
 /// </summary>
-[SugarTable("sys_wechat_pay", "系统微信支付表")]
-public class WeChatPay : EntityBase
+[SugarTable(null, "系统微信支付表")]
+public class SysWechatPay : EntityBase
 {
     /// <summary>
     /// 微信商户号
@@ -135,7 +135,7 @@ public class WeChatPay : EntityBase
     /// </summary>
     [SugarColumn(IsIgnore = true)]
     [Navigate(NavigateType.OneToOne, nameof(OpenId))]
-    public WeChatUser WeChatUser { get; set; }
+    public SysWechatUser SysWechatUser { get; set; }
 
     /// <summary>
     /// 子商户号

+ 2 - 2
Admin.NET/Admin.NET.Core/Entity/WeChatUser.cs → Admin.NET/Admin.NET.Core/Entity/SysWechatUser.cs

@@ -3,8 +3,8 @@
 /// <summary>
 /// 系统微信用户表
 /// </summary>
-[SugarTable("sys_wechat_user", "系统微信用户表")]
-public class WeChatUser : EntityBase
+[SugarTable(null, "系统微信用户表")]
+public class SysWechatUser : EntityBase
 {
     /// <summary>
     /// 系统用户Id

+ 1 - 1
Admin.NET/Admin.NET.Core/Enum/WeChatReturnCodeEnum.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 微信开发返回码
 /// </summary>
-public enum WeChatReturnCodeEnum
+public enum WechatReturnCodeEnum
 {
     SenparcWeixinSDK配置错误 = -99, // 0xFFFFFF9D
     系统繁忙此时请开发者稍候再试 = -1, // 0xFFFFFFFF

+ 5 - 0
Admin.NET/Admin.NET.Core/Option/DbConnectionOptions.cs

@@ -22,4 +22,9 @@ public sealed class DbConnectionConfig : ConnectionConfig
     /// 启用库表差异日志
     /// </summary>
     public bool EnableDiffLog { get; set; }
+
+    /// <summary>
+    /// 启用驼峰转下划线
+    /// </summary>
+    public bool EnableUnderLine { get; set; }
 }

+ 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 → 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 → 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

+ 126 - 126
Admin.NET/Admin.NET.Core/Service/Job/DbJobPersistence.cs

@@ -1,127 +1,127 @@
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 作业持久化(数据库)
-/// </summary>
-public class DbJobPersistence : IJobPersistence
-{
-    private readonly IServiceProvider _serviceProvider;
-
-    public DbJobPersistence(IServiceProvider serviceProvider)
-    {
-        _serviceProvider = serviceProvider;
-    }
-
-    /// <summary>
-    /// 作业调度服务启动时
-    /// </summary>
-    /// <returns></returns>
-    public IEnumerable<SchedulerBuilder> Preload()
-    {
-        using var serviceScope = _serviceProvider.CreateScope();
-        var jobDetailRep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysJobDetail>>();
-        var jobTriggerRep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysJobTrigger>>();
-
-        // 获取内存的作业
-        IEnumerable<SchedulerBuilder> memoryJobs = App.EffectiveTypes.ScanToBuilders();
-
-        // 若数据库不存在任何作业,则返回内存作业
-        if (!jobDetailRep.IsAny(u => true)) return memoryJobs;
-
-        var schedulerBuilders = new List<SchedulerBuilder>();
-
-        // 获取数据库所有作业
-        var dbJobs = jobDetailRep.GetList();
-        foreach (var dbJob in dbJobs)
-        {
-            var jobDetail = JobBuilder.Create(dbJob.AssemblyName, dbJob.JobType).LoadFrom(dbJob);
-
-            // 加载数据库的触发器
-            var triggerBuilders = new List<TriggerBuilder>();
-            var dbTriggers = jobTriggerRep.GetList(u => u.JobId == dbJob.JobId)
-                .Select(u => Triggers.Create(u.AssemblyName, u.TriggerType).LoadFrom(u)).ToArray();
-            triggerBuilders.AddRange(dbTriggers);
-
-            var memoryTriggers = memoryJobs.Where(u => u.GetJobBuilder().JobId == dbJob.JobId).SelectMany(u => u.GetTriggerBuilders());
-            foreach (var memTrigger in memoryTriggers)
-            {
-                var triggerId = memTrigger.TriggerId;
-                // 若数据库中已包含这个触发器
-                if (!string.IsNullOrWhiteSpace(triggerId) && dbTriggers.Any(u => u.TriggerId == triggerId))
-                    continue;
-                triggerBuilders.Add(memTrigger);
-            }
-            schedulerBuilders.Add(SchedulerBuilder.Create(jobDetail, triggerBuilders.ToArray()).Updated());
-        }
-
-        // 合并作业
-        foreach (var job in memoryJobs)
-        {
-            var jobId = job.GetJobBuilder().JobId;
-            // 若数据库中已包含这个作业
-            if (!string.IsNullOrWhiteSpace(jobId) && dbJobs.Any(u => u.JobId == jobId))
-                continue;
-            schedulerBuilders.Add(job);
-        }
-
-        return schedulerBuilders;
-    }
-
-    /// <summary>
-    /// 作业计划初始化通知
-    /// </summary>
-    /// <param name="builder"></param>
-    /// <returns></returns>
-    public SchedulerBuilder OnLoading(SchedulerBuilder builder)
-    {
-        return builder;
-    }
-
-    /// <summary>
-    /// 作业计划Scheduler的JobDetail变化时
-    /// </summary>
-    /// <param name="context"></param>
-    public void OnChanged(PersistenceContext context)
-    {
-        using var serviceScope = _serviceProvider.CreateScope();
-        var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
-
-        var jobDetail = context.JobDetail.Adapt<SysJobDetail>();
-        if (context.Behavior == PersistenceBehavior.Appended)
-        {
-            db.Insertable(jobDetail).ExecuteCommand();
-        }
-        else if (context.Behavior == PersistenceBehavior.Updated)
-        {
-            db.Updateable(jobDetail).IgnoreColumns(it => new { it.Id }).WhereColumns(u => new { u.JobId }).ExecuteCommand();
-        }
-        else if (context.Behavior == PersistenceBehavior.Removed)
-        {
-            db.Deleteable<SysJobDetail>().Where(u => u.JobId == jobDetail.JobId).ExecuteCommand();
-        }
-    }
-
-    /// <summary>
-    /// 作业计划Scheduler的触发器Trigger变化时
-    /// </summary>
-    /// <param name="context"></param>
-    public void OnTriggerChanged(PersistenceTriggerContext context)
-    {
-        using var serviceScope = _serviceProvider.CreateScope();
-        var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
-
-        var jobTrigger = context.Trigger.Adapt<SysJobTrigger>();
-        if (context.Behavior == PersistenceBehavior.Appended)
-        {
-            db.Insertable(jobTrigger).ExecuteCommand();
-        }
-        else if (context.Behavior == PersistenceBehavior.Updated)
-        {
-            db.Updateable(jobTrigger).IgnoreColumns(it => new { it.Id }).WhereColumns(u => new { u.TriggerId, u.JobId }).ExecuteCommand();
-        }
-        else if (context.Behavior == PersistenceBehavior.Removed)
-        {
-            db.Deleteable<SysJobTrigger>().Where(u => u.TriggerId == jobTrigger.TriggerId && u.JobId == jobTrigger.JobId).ExecuteCommand();
-        }
-    }
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 作业持久化(数据库)
+/// </summary>
+public class DbJobPersistence : IJobPersistence
+{
+    private readonly IServiceProvider _serviceProvider;
+
+    public DbJobPersistence(IServiceProvider serviceProvider)
+    {
+        _serviceProvider = serviceProvider;
+    }
+
+    /// <summary>
+    /// 作业调度服务启动时
+    /// </summary>
+    /// <returns></returns>
+    public IEnumerable<SchedulerBuilder> Preload()
+    {
+        using var serviceScope = _serviceProvider.CreateScope();
+        var jobDetailRep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysJobDetail>>();
+        var jobTriggerRep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysJobTrigger>>();
+
+        // 获取内存的作业
+        IEnumerable<SchedulerBuilder> memoryJobs = App.EffectiveTypes.ScanToBuilders();
+
+        // 若数据库不存在任何作业,则返回内存作业
+        if (!jobDetailRep.IsAny(u => true)) return memoryJobs;
+
+        var schedulerBuilders = new List<SchedulerBuilder>();
+
+        // 获取数据库所有作业
+        var dbJobs = jobDetailRep.GetList();
+        foreach (var dbJob in dbJobs)
+        {
+            var jobDetail = JobBuilder.Create(dbJob.AssemblyName, dbJob.JobType).LoadFrom(dbJob);
+
+            // 加载数据库的触发器
+            var triggerBuilders = new List<TriggerBuilder>();
+            var dbTriggers = jobTriggerRep.GetList(u => u.JobId == dbJob.JobId)
+                .Select(u => Triggers.Create(u.AssemblyName, u.TriggerType).LoadFrom(u)).ToArray();
+            triggerBuilders.AddRange(dbTriggers);
+
+            var memoryTriggers = memoryJobs.Where(u => u.GetJobBuilder().JobId == dbJob.JobId).SelectMany(u => u.GetTriggerBuilders());
+            foreach (var memTrigger in memoryTriggers)
+            {
+                var triggerId = memTrigger.TriggerId;
+                // 若数据库中已包含这个触发器
+                if (!string.IsNullOrWhiteSpace(triggerId) && dbTriggers.Any(u => u.TriggerId == triggerId))
+                    continue;
+                triggerBuilders.Add(memTrigger);
+            }
+            schedulerBuilders.Add(SchedulerBuilder.Create(jobDetail, triggerBuilders.ToArray()).Updated());
+        }
+
+        // 合并作业
+        foreach (var job in memoryJobs)
+        {
+            var jobId = job.GetJobBuilder().JobId;
+            // 若数据库中已包含这个作业
+            if (!string.IsNullOrWhiteSpace(jobId) && dbJobs.Any(u => u.JobId == jobId))
+                continue;
+            schedulerBuilders.Add(job);
+        }
+
+        return schedulerBuilders;
+    }
+
+    /// <summary>
+    /// 作业计划初始化通知
+    /// </summary>
+    /// <param name="builder"></param>
+    /// <returns></returns>
+    public SchedulerBuilder OnLoading(SchedulerBuilder builder)
+    {
+        return builder;
+    }
+
+    /// <summary>
+    /// 作业计划Scheduler的JobDetail变化时
+    /// </summary>
+    /// <param name="context"></param>
+    public void OnChanged(PersistenceContext context)
+    {
+        using var serviceScope = _serviceProvider.CreateScope();
+        var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
+
+        var jobDetail = context.JobDetail.Adapt<SysJobDetail>();
+        if (context.Behavior == PersistenceBehavior.Appended)
+        {
+            db.Insertable(jobDetail).ExecuteCommand();
+        }
+        else if (context.Behavior == PersistenceBehavior.Updated)
+        {
+            db.Updateable(jobDetail).IgnoreColumns(it => new { it.Id }).WhereColumns(u => new { u.JobId }).ExecuteCommand();
+        }
+        else if (context.Behavior == PersistenceBehavior.Removed)
+        {
+            db.Deleteable<SysJobDetail>().Where(u => u.JobId == jobDetail.JobId).ExecuteCommand();
+        }
+    }
+
+    /// <summary>
+    /// 作业计划Scheduler的触发器Trigger变化时
+    /// </summary>
+    /// <param name="context"></param>
+    public void OnTriggerChanged(PersistenceTriggerContext context)
+    {
+        using var serviceScope = _serviceProvider.CreateScope();
+        var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
+
+        var jobTrigger = context.Trigger.Adapt<SysJobTrigger>();
+        if (context.Behavior == PersistenceBehavior.Appended)
+        {
+            db.Insertable(jobTrigger).ExecuteCommand();
+        }
+        else if (context.Behavior == PersistenceBehavior.Updated)
+        {
+            db.Updateable(jobTrigger).IgnoreColumns(it => new { it.Id }).WhereColumns(u => new { u.TriggerId, u.JobId }).ExecuteCommand();
+        }
+        else if (context.Behavior == PersistenceBehavior.Removed)
+        {
+            db.Deleteable<SysJobTrigger>().Where(u => u.TriggerId == jobTrigger.TriggerId && u.JobId == jobTrigger.JobId).ExecuteCommand();
+        }
+    }
 }

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WeChatInput.cs → 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 → 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 → 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

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WeChatUserInput.cs → Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatUserInput.cs

@@ -1,6 +1,6 @@
 namespace Admin.NET.Core.Service;
 
-public class WeChatUserInput : BasePageInput
+public class WechatUserInput : BasePageInput
 {
     /// <summary>
     /// 昵称
@@ -13,6 +13,6 @@ public class WeChatUserInput : BasePageInput
     public string Mobile { get; set; }
 }
 
-public class DeleteWeChatUserInput : BaseIdInput
+public class DeleteWechatUserInput : BaseIdInput
 {
 }

+ 54 - 54
Admin.NET/Admin.NET.Core/Service/WeChat/WeChatPayService.cs → Admin.NET/Admin.NET.Core/Service/WeChat/SysWechatPayService.cs

@@ -4,21 +4,21 @@
 /// 微信支付服务
 /// </summary>
 [ApiDescriptionSettings(Order = 99)]
-public class WeChatPayService : IDynamicApiController, ITransient
+public class SysWechatPayService : IDynamicApiController, ITransient
 {
-    private readonly SqlSugarRepository<WeChatPay> _weChatPayUserRep;
+    private readonly SqlSugarRepository<SysWechatPay> _sysWechatPayUserRep;
 
-    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 SysWechatPayService(SqlSugarRepository<SysWechatPay> sysWechatPayUserRep,
+        IOptions<WechatPayOptions> wechatPayOptions,
         IOptions<PayCallBackOptions> payCallBackOptions)
     {
-        _weChatPayUserRep = weChatPayUserRep;
-        _weChatPayOptions = weChatPayOptions.Value;
-        WeChatTenpayClient = CreateTenpayClient();
+        _sysWechatPayUserRep = sysWechatPayUserRep;
+        _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 = File.ReadAllText(App.WebHostEnvironment.ContentRootPath + _weChatPayOptions.MerchantCertificatePrivateKey),
+            MerchantId = _wechatPayOptions.MerchantId,
+            MerchantV3Secret = _wechatPayOptions.MerchantV3Secret,
+            MerchantCertificateSerialNumber = _wechatPayOptions.MerchantCertificateSerialNumber,
+            MerchantCertificatePrivateKey = File.ReadAllText(App.WebHostEnvironment.ContentRootPath + _wechatPayOptions.MerchantCertificatePrivateKey),
             PlatformCertificateManager = new InMemoryCertificateManager()
         };
         return new WechatTenpayClient(tenpayClientOptions);
@@ -44,38 +44,38 @@ public class WeChatPayService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [HttpPost("/weChatPay/genPayPara")]
-    public dynamic GenerateParametersForJsapiPay(WeChatPayParaInput input)
+    [HttpPost("/sysWechatPay/genPayPara")]
+    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)
+    [HttpPost("/sysWechatPay/payTransaction")]
+    public async Task<dynamic> CreatePayTransaction([FromBody] WechatPayTransactionInput input)
     {
         var request = new CreatePayTransactionJsapiRequest()
         {
             OutTradeNumber = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(100, 1000), // 订单号
-            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 SysWechatPay()
         {
-            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 _sysWechatPayUserRep.InsertAsync(wechatPay);
 
         return new
         {
@@ -95,35 +95,35 @@ public class WeChatPayService : IDynamicApiController, ITransient
     /// <summary>
     /// 微信支付统一下单获取Id(服务商模式)
     /// </summary>
-    [HttpPost("/weChatPay/payPartnerTransaction")]
-    public async Task<dynamic> CreatePayPartnerTransaction([FromBody] WeChatPayTransactionInput input)
+    [HttpPost("/sysWechatPay/payPartnerTransaction")]
+    public async Task<dynamic> CreatePayPartnerTransaction([FromBody] WechatPayTransactionInput input)
     {
         var request = new CreatePayPartnerTransactionJsapiRequest()
         {
             OutTradeNumber = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(100, 1000), // 订单号
-            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 SysWechatPay()
         {
-            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 _sysWechatPayUserRep.InsertAsync(wechatPay);
 
         return new
         {
@@ -145,32 +145,32 @@ public class WeChatPayService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="tradeId"></param>
     /// <returns></returns>
-    [HttpGet("/weChatPay/payInfo")]
-    public async Task<WeChatPay> GetWeChatPayInfo(string tradeId)
+    [HttpGet("/sysWechatPay/payInfo")]
+    public async Task<SysWechatPay> GetWechatPayInfo(string tradeId)
     {
-        return await _weChatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == tradeId);
+        return await _sysWechatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == tradeId);
     }
 
     /// <summary>
     /// 微信支付成功回调(商户直连)
     /// </summary>
     /// <returns></returns>
-    [HttpPost("/notify/weChatPay/payCallBack")]
+    [HttpPost("/sysWechatPay/notify/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 _sysWechatPayUserRep.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 _sysWechatPayUserRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
 
-            return new WeChatPayOutput()
+            return new WechatPayOutput()
             {
                 Total = wechatPay.Total,
                 Attachment = wechatPay.Attachment,
@@ -202,22 +202,22 @@ public class WeChatPayService : IDynamicApiController, ITransient
     /// 微信支付成功回调(服务商模式)
     /// </summary>
     /// <returns></returns>
-    [HttpPost("/notify/weChatPay/payPartnerCallback")]
+    [HttpPost("/sysWechatPay/notify/payPartnerCallback")]
     [AllowAnonymous]
-    public async Task WeChatPayPartnerCallBack()
+    public async Task WechatPayPartnerCallBack()
     {
         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<PartnerTransactionResource>(callbackModel);
+            var callbackResource = WechatTenpayClient.DecryptEventResource<PartnerTransactionResource>(callbackModel);
 
             // 修改订单支付状态
-            var wechatPay = await _weChatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == callbackResource.OutTradeNumber
+            var wechatPay = await _sysWechatPayUserRep.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 _sysWechatPayUserRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
         }
     }
 }

+ 25 - 25
Admin.NET/Admin.NET.Core/Service/WeChat/WeChatService.cs → Admin.NET/Admin.NET.Core/Service/WeChat/SysWechatService.cs

@@ -4,16 +4,16 @@
 /// 微信公众号服务
 /// </summary>
 [ApiDescriptionSettings(Order = 101)]
-public class WeChatService : IDynamicApiController, ITransient
+public class SysWechatService : IDynamicApiController, ITransient
 {
-    private readonly SqlSugarRepository<WeChatUser> _weChatUserRep;
-    private readonly WechatApiClient _weChatApiClient;
+    private readonly SqlSugarRepository<SysWechatUser> _sysWechatUserRep;
+    private readonly WechatApiClient _wechatApiClient;
 
-    public WeChatService(SqlSugarRepository<WeChatUser> weChatUserRep,
-        WeChatApiHttpClient weChatApiHttpClient)
+    public SysWechatService(SqlSugarRepository<SysWechatUser> sysWechatUserRep,
+        WechatApiHttpClient wechatApiHttpClient)
     {
-        _weChatUserRep = weChatUserRep;
-        _weChatApiClient = weChatApiHttpClient.CreateWeChatClient();
+        _sysWechatUserRep = sysWechatUserRep;
+        _wechatApiClient = wechatApiHttpClient.CreateWechatClient();
     }
 
     /// <summary>
@@ -21,30 +21,30 @@ public class WeChatService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [HttpPost("/weChat/genAuthUrl")]
+    [HttpPost("/sysWechat/genAuthUrl")]
     [AllowAnonymous]
     public string GenAuthUrl(GenAuthUrlInput input)
     {
-        return _weChatApiClient.GenerateParameterizedUrlForConnectOAuth2Authorize(input.RedirectUrl, input.Scope);
+        return _wechatApiClient.GenerateParameterizedUrlForConnectOAuth2Authorize(input.RedirectUrl, input.Scope);
     }
 
     /// <summary>
     /// 授权登录(Code换取OpenId)
     /// </summary>
     /// <param name="input"></param>
-    [HttpPost("/weChat/snsOAuth2")]
+    [HttpPost("/sysWechat/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);
-        if (resOAuth2.ErrorCode != (int)WeChatReturnCodeEnum.请求成功)
+        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 _sysWechatUserRep.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<SysWechatUser>();
             wxUser.Avatar = resUserInfo.HeadImageUrl;
             wxUser.NickName = resUserInfo.Nickname;
-            wxUser = await _weChatUserRep.AsInsertable(wxUser).ExecuteReturnEntityAsync();
+            wxUser = await _sysWechatUserRep.AsInsertable(wxUser).ExecuteReturnEntityAsync();
         }
         else
         {
             wxUser.AccessToken = resOAuth2.AccessToken;
             wxUser.RefreshToken = resOAuth2.RefreshToken;
-            await _weChatUserRep.AsUpdateable(wxUser).IgnoreColumns(true).ExecuteCommandAsync();
+            await _sysWechatUserRep.AsUpdateable(wxUser).IgnoreColumns(true).ExecuteCommandAsync();
         }
 
         return resOAuth2.OpenId;
@@ -73,11 +73,11 @@ public class WeChatService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [HttpPost("/weChat/openIdLogin")]
+    [HttpPost("/sysWechat/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 _sysWechatUserRep.GetFirstAsync(p => p.OpenId == input.OpenId);
         if (wxUser == null)
             throw Oops.Oh("微信登录");
         return new
@@ -97,17 +97,17 @@ public class WeChatService : IDynamicApiController, ITransient
     /// 获取配置签名参数(wx.config)
     /// </summary>
     /// <returns></returns>
-    [HttpPost("/weChat/genConfigPara")]
+    [HttpPost("/sysWechat/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);
     }
 }

+ 64 - 0
Admin.NET/Admin.NET.Core/Service/WeChat/SysWechatUserService.cs

@@ -0,0 +1,64 @@
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 微信账号服务
+/// </summary>
+[ApiDescriptionSettings(Order = 100)]
+public class SysWechatUserService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<SysWechatUser> _sysWechatUserRep;
+
+    public SysWechatUserService(SqlSugarRepository<SysWechatUser> sysWechatUserRep)
+    {
+        _sysWechatUserRep = sysWechatUserRep;
+    }
+
+    /// <summary>
+    /// 获取微信用户列表
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet("/sysWechatUser/page")]
+    public async Task<SqlSugarPagedList<SysWechatUser>> GetWechatUserPage([FromQuery] WechatUserInput input)
+    {
+        return await _sysWechatUserRep.AsQueryable()
+            .WhereIF(!string.IsNullOrWhiteSpace(input.NickName), u => u.NickName.Contains(input.NickName))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Mobile), u => u.Mobile.Contains(input.Mobile))
+            .OrderBy(u => u.Id, OrderByType.Desc)
+            .ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 增加微信用户
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost("/sysWechatUser/add")]
+    public async Task AddWechatUser(SysWechatUser input)
+    {
+        await _sysWechatUserRep.InsertAsync(input.Adapt<SysWechatUser>());
+    }
+
+    /// <summary>
+    /// 更新微信用户
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost("/sysWechatUser/update")]
+    public async Task UpdateWechatUser(SysWechatUser input)
+    {
+        var weChatUser = input.Adapt<SysWechatUser>();
+        await _sysWechatUserRep.AsUpdateable(weChatUser).IgnoreColumns(true).ExecuteCommandAsync();
+    }
+
+    /// <summary>
+    /// 删除微信用户
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost("/sysWechatUser/delete")]
+    public async Task DeleteWechatUser(DeleteWechatUserInput input)
+    {
+        await _sysWechatUserRep.DeleteAsync(u => u.Id == input.Id);
+    }
+}

+ 0 - 64
Admin.NET/Admin.NET.Core/Service/WeChat/WeChatUserService.cs

@@ -1,64 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 微信账号服务
-/// </summary>
-[ApiDescriptionSettings(Order = 100)]
-public class WeChatUserService : IDynamicApiController, ITransient
-{
-    private readonly SqlSugarRepository<WeChatUser> _weChatUserRep;
-
-    public WeChatUserService(SqlSugarRepository<WeChatUser> weChatUserRep)
-    {
-        _weChatUserRep = weChatUserRep;
-    }
-
-    /// <summary>
-    /// 获取微信用户列表
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpGet("/weChatUser/page")]
-    public async Task<SqlSugarPagedList<WeChatUser>> GetWeChatUserPage([FromQuery] WeChatUserInput input)
-    {
-        return await _weChatUserRep.AsQueryable()
-            .WhereIF(!string.IsNullOrWhiteSpace(input.NickName), u => u.NickName.Contains(input.NickName))
-            .WhereIF(!string.IsNullOrWhiteSpace(input.Mobile), u => u.Mobile.Contains(input.Mobile))
-            .OrderBy(u => u.Id, OrderByType.Desc)
-            .ToPagedListAsync(input.Page, input.PageSize);
-    }
-
-    /// <summary>
-    /// 增加微信用户
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpPost("/weChatUser/add")]
-    public async Task AddWeChatUser(WeChatUser input)
-    {
-        await _weChatUserRep.InsertAsync(input.Adapt<WeChatUser>());
-    }
-
-    /// <summary>
-    /// 更新微信用户
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpPost("/weChatUser/update")]
-    public async Task UpdateWeChatUser(WeChatUser input)
-    {
-        var weChatUser = input.Adapt<WeChatUser>();
-        await _weChatUserRep.AsUpdateable(weChatUser).IgnoreColumns(true).ExecuteCommandAsync();
-    }
-
-    /// <summary>
-    /// 删除微信用户
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpPost("/weChatUser/delete")]
-    public async Task DeleteWeChatUser(DeleteWeChatUserInput input)
-    {
-        await _weChatUserRep.DeleteAsync(u => u.Id == input.Id);
-    }
-}

+ 11 - 11
Admin.NET/Admin.NET.Core/Service/WeChat/WeChatApiHttpClient.cs → Admin.NET/Admin.NET.Core/Service/WeChat/WechatApiHttpClient.cs

@@ -4,28 +4,28 @@
 /// 微信API客户端
 /// </summary>
 [ApiDescriptionSettings(false)]
-public partial class WeChatApiHttpClient : ISingleton
+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;
+        _wechatOptions = wechatOptions.Value;
     }
 
     /// <summary>
     /// 微信公众号
     /// </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 =>
@@ -42,13 +42,13 @@ public partial class WeChatApiHttpClient : ISingleton
     /// <returns></returns>
     public WechatApiClient CreateWxOpenClient()
     {
-        if (string.IsNullOrEmpty(_weChatOptions.WxOpenAppId) || string.IsNullOrEmpty(_weChatOptions.WxOpenAppSecret))
+        if (string.IsNullOrEmpty(_wechatOptions.WxOpenAppId) || string.IsNullOrEmpty(_wechatOptions.WxOpenAppSecret))
             throw Oops.Oh("微信小程序配置错误");
 
         var WechatApiClient = new WechatApiClient(new WechatApiClientOptions()
         {
-            AppId = _weChatOptions.WxOpenAppId,
-            AppSecret = _weChatOptions.WxOpenAppSecret
+            AppId = _wechatOptions.WxOpenAppId,
+            AppSecret = _wechatOptions.WxOpenAppSecret
         });
 
         WechatApiClient.Configure(settings =>

+ 13 - 4
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -48,13 +48,15 @@ public static class SqlSugarSetup
         {
             EntityNameService = (type, entity) => // 处理表
             {
-                // entity.DbTableName = UtilMethods.ToUnderLine(entity.DbTableName); // 驼峰转下划线
+                if (config.EnableUnderLine && !entity.DbTableName.Contains('_'))
+                    entity.DbTableName = UtilMethods.ToUnderLine(entity.DbTableName); // 驼峰转下划线
             },
             EntityService = (type, column) => // 处理列
             {
                 if (new NullabilityInfoContext().Create(type).WriteState is NullabilityState.Nullable)
                     column.IsNullable = true;
-                // column.DbColumnName = UtilMethods.ToUnderLine(column.DbColumnName ?? column.PropertyName); // 驼峰转下划线
+                if (config.EnableUnderLine && !column.IsIgnore && !column.DbColumnName.Contains('_'))
+                    column.DbColumnName = UtilMethods.ToUnderLine(column.DbColumnName); // 驼峰转下划线
             },
             DataInfoCacheService = new SqlSugarCache(),
         };
@@ -239,16 +241,23 @@ public static class SqlSugarSetup
 
             var seedDataTable = seedData.ToList().ToDataTable();
             seedDataTable.TableName = dbProvider.EntityMaintenance.GetEntityInfo(entityType).DbTableName;
+            if (config.EnableUnderLine) // 驼峰转下划线
+            {                
+                foreach (DataColumn col in seedDataTable.Columns)
+                {
+                    col.ColumnName = UtilMethods.ToUnderLine(col.ColumnName);
+                }
+            }
             if (seedDataTable.Columns.Contains(SqlSugarConst.PrimaryKey))
             {
-                var storage = dbProvider.CopyNew().Storageable(seedDataTable).WhereColumns(SqlSugarConst.PrimaryKey).ToStorage();
+                var storage = dbProvider.Storageable(seedDataTable).WhereColumns(SqlSugarConst.PrimaryKey).ToStorage();
                 storage.AsInsertable.ExecuteCommand();
                 var ignoreUpdate = hasDataMethod.GetCustomAttribute<IgnoreUpdateAttribute>();
                 if (ignoreUpdate == null) storage.AsUpdateable.ExecuteCommand();
             }
             else // 没有主键或者不是预定义的主键(有重复的可能)
             {
-                var storage = dbProvider.CopyNew().Storageable(seedDataTable).ToStorage();
+                var storage = dbProvider.Storageable(seedDataTable).ToStorage();
                 storage.AsInsertable.ExecuteCommand();
             }
         }

+ 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>();