😎1、优化微信相关 2、优化上传头像和签名 3、升级依赖

This commit is contained in:
zuohuaijun 2025-05-15 00:25:13 +08:00
parent c487187709
commit 5eb1587e4d
10 changed files with 27 additions and 78 deletions

View File

@ -28,14 +28,14 @@
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
<PackageReference Include="BouncyCastle.Cryptography" Version="2.5.1" Aliases="BouncyCastleV2" />
<PackageReference Include="Elastic.Clients.Elasticsearch" Version="9.0.3" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.61" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.61" />
<PackageReference Include="Furion.Pure" Version="4.9.7.61" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.62" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.62" />
<PackageReference Include="Furion.Pure" Version="4.9.7.62" />
<PackageReference Include="Hardware.Info" Version="101.0.1" />
<PackageReference Include="Hashids.net" Version="1.7.0" />
<PackageReference Include="IPTools.China" Version="1.6.0" />
<PackageReference Include="IPTools.International" Version="1.6.0" />
<PackageReference Include="log4net" Version="3.0.4" />
<PackageReference Include="log4net" Version="3.1.0" />
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.5.2" />
<PackageReference Include="Magicodes.IE.Pdf" Version="2.7.5.2" />
<PackageReference Include="Magicodes.IE.Word" Version="2.7.5.2" />
@ -56,7 +56,7 @@
<PackageReference Include="SSH.NET" Version="2025.0.0" />
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.3" />
<PackageReference Include="System.Net.Http" Version="4.3.4" />
<PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1236" />
<PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1238" />
<PackageReference Include="UAParser" Version="3.1.47" />
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
</ItemGroup>
@ -76,9 +76,9 @@
<PackageReference Include="AspNet.Security.OAuth.Gitee" Version="9.3.0" />
<PackageReference Include="AspNet.Security.OAuth.Weixin" Version="9.3.0" />
<PackageReference Include="Lazy.Captcha.Core" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="9.0.4" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="9.0.4" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="9.0.4" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="9.0.5" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="9.0.5" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="9.0.5" />
<PackageReference Include="Microsoft.PowerShell.SDK" Version="7.5.1" />
<PackageReference Include="My.Extensions.Localization.Json" Version="3.4.0" />
</ItemGroup>

View File

@ -1,31 +0,0 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 微信AccessToken有效性检查作业任务
/// </summary>
[JobDetail("job_WechatAccessTokenCheckJob", Description = "微信AccessToken有效性检查", GroupName = "default", Concurrent = false)]
[PeriodSeconds(60, TriggerId = "trigger_WechatAccessTokenCheckJob", Description = "微信AccessToken有效性检查", RunOnStart = true)]
public class WechatAccessTokenCheckJob : IJob
{
private readonly IServiceScopeFactory _scopeFactory;
public WechatAccessTokenCheckJob(IServiceScopeFactory scopeFactory)
{
_scopeFactory = scopeFactory;
}
public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
using var serviceScope = _scopeFactory.CreateScope();
var wechatApiClientFactory = serviceScope.ServiceProvider.GetService<WechatApiClientFactory>();
await wechatApiClientFactory.CheckWechatAccessTokenAsync();
await wechatApiClientFactory.CheckWxOpenAccessTokenAsync();
}
}

View File

@ -310,13 +310,13 @@ public class SysFileService : IDynamicApiController, ITransient
var sysUserRep = _sysFileRep.ChangeRepository<SqlSugarRepository<SysUser>>();
var user = await sysUserRep.GetByIdAsync(_userManager.UserId);
await sysUserRep.UpdateAsync(u => new SysUser() { Avatar = sysFile.Url }, u => u.Id == user.Id);
// 删除已有头像文件
if (!string.IsNullOrWhiteSpace(user.Avatar))
{
var fileId = Path.GetFileNameWithoutExtension(user.Avatar);
await DeleteFile(new DeleteFileInput { Id = long.Parse(fileId) });
}
await sysUserRep.UpdateAsync(u => new SysUser() { Avatar = sysFile.Url }, u => u.Id == user.Id);
return sysFile;
}
@ -332,13 +332,13 @@ public class SysFileService : IDynamicApiController, ITransient
var sysUserRep = _sysFileRep.ChangeRepository<SqlSugarRepository<SysUser>>();
var user = await sysUserRep.GetByIdAsync(_userManager.UserId);
await sysUserRep.UpdateAsync(u => new SysUser() { Signature = sysFile.Url }, u => u.Id == user.Id);
// 删除已有电子签名文件
if (!string.IsNullOrWhiteSpace(user.Signature) && user.Signature.EndsWith(".png"))
{
var fileId = Path.GetFileNameWithoutExtension(user.Signature);
await DeleteFile(new DeleteFileInput { Id = long.Parse(fileId) });
}
await sysUserRep.UpdateAsync(u => new SysUser() { Signature = sysFile.Url }, u => u.Id == user.Id);
return sysFile;
}

View File

@ -16,18 +16,15 @@ public class SysWechatService : IDynamicApiController, ITransient
private readonly SysConfigService _sysConfigService;
private readonly WechatApiClientFactory _wechatApiClientFactory;
private readonly WechatApiClient _wechatApiClient;
private readonly SysCacheService _sysCacheService;
public SysWechatService(SqlSugarRepository<SysOAuthUser> sysOAuthUserRep,
SysConfigService sysConfigService,
WechatApiClientFactory wechatApiClientFactory,
SysCacheService sysCacheService)
WechatApiClientFactory wechatApiClientFactory)
{
_sysOAuthUserRep = sysOAuthUserRep;
_sysConfigService = sysConfigService;
_wechatApiClientFactory = wechatApiClientFactory;
_wechatApiClient = wechatApiClientFactory.CreateWechatClient();
_sysCacheService = sysCacheService;
}
/// <summary>
@ -198,20 +195,6 @@ public class SysWechatService : IDynamicApiController, ITransient
/// </summary>
private async Task<string> GetCgibinToken()
{
// 先从缓存中取 AccessToken
var wx_accessToken = _sysCacheService.Get<string>("sys_wx_accessToken");
if (!string.IsNullOrWhiteSpace(wx_accessToken))
{
return wx_accessToken;
}
// 若缓存没有则从微信公众号重新获取 AccessToken
var reqCgibinToken = new CgibinTokenRequest();
var resCgibinToken = await _wechatApiClient.ExecuteCgibinTokenAsync(reqCgibinToken);
if (resCgibinToken.ErrorCode != (int)WechatReturnCodeEnum.)
throw Oops.Oh(resCgibinToken.ErrorMessage + " " + resCgibinToken.ErrorCode);
_sysCacheService.Set("sys_wx_accessToken", resCgibinToken.AccessToken, TimeSpan.FromSeconds(resCgibinToken.ExpiresIn)); // 缓存 AccessToken
return resCgibinToken.AccessToken;
return await _wechatApiClientFactory.TryGetWechatAccessTokenAsync();
}
}

View File

@ -16,6 +16,7 @@ public class SysWxOpenService : IDynamicApiController, ITransient
private readonly SysConfigService _sysConfigService;
private readonly WechatApiClient _wechatApiClient;
private readonly SysFileService _sysFileService;
private readonly WechatApiClientFactory _wechatApiClientFactory;
public SysWxOpenService(SqlSugarRepository<SysOAuthUser> sysOAuthUserRep,
SysConfigService sysConfigService,
@ -26,6 +27,7 @@ public class SysWxOpenService : IDynamicApiController, ITransient
_sysConfigService = sysConfigService;
_wechatApiClient = wechatApiClientFactory.CreateWxOpenClient();
_sysFileService = sysFileService;
_wechatApiClientFactory = wechatApiClientFactory;
}
/// <summary>
@ -416,10 +418,6 @@ public class SysWxOpenService : IDynamicApiController, ITransient
/// </summary>
private async Task<string> GetCgibinToken()
{
var reqCgibinToken = new CgibinTokenRequest();
var resCgibinToken = await _wechatApiClient.ExecuteCgibinTokenAsync(reqCgibinToken);
if (resCgibinToken.ErrorCode != (int)WechatReturnCodeEnum.)
throw Oops.Oh(resCgibinToken.ErrorMessage + " " + resCgibinToken.ErrorCode);
return resCgibinToken.AccessToken;
return await _wechatApiClientFactory.TryGetWxOpenAccessTokenAsync();
}
}

View File

@ -132,7 +132,7 @@ public partial class WechatApiClientFactory : ISingleton
var req = new CgibinOpenApiQuotaGetRequest
{
AccessToken = await TryGetWxOpenAccessTokenAsync(),
AccessToken = await TryGetWechatAccessTokenAsync(),
CgiPath = "/cgi-bin/token"
};
var client = CreateWechatClient();

View File

@ -12,7 +12,7 @@
<ItemGroup>
<PackageReference Include="IGeekFan.AspNetCore.Knife4jUI" Version="0.0.16" />
<PackageReference Include="MQTTnet.AspNetCore" Version="5.0.1.1416" />
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.4" />
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.5" />
</ItemGroup>
<ItemGroup>

View File

@ -26,7 +26,7 @@
<ItemGroup>
<PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.13.0" />
<PackageReference Include="Rezero.Api" Version="1.8.14" />
<PackageReference Include="Rezero.Api" Version="1.8.16" />
</ItemGroup>
<ItemGroup>

View File

@ -2,7 +2,7 @@
"name": "admin.net.pro",
"type": "module",
"version": "2.4.33",
"lastBuildTime": "2025.05.12",
"lastBuildTime": "2025.05.15",
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
"author": "zuohuaijun",
"license": "MIT",
@ -25,7 +25,7 @@
"@vue-office/docx": "^1.6.2",
"@vue-office/excel": "^1.7.14",
"@vue-office/pdf": "^2.0.9",
"@vueuse/core": "^13.1.0",
"@vueuse/core": "^13.2.0",
"@vxe-ui/plugin-export-xlsx": "^4.2.1",
"@vxe-ui/plugin-render-element": "^4.0.11",
"@wangeditor/editor": "^5.1.23",
@ -80,8 +80,8 @@
"vue-signature-pad": "^3.0.2",
"vue3-flag-icons": "^0.0.3",
"vue3-tree-org": "^4.2.2",
"vxe-pc-ui": "^4.6.4",
"vxe-table": "^4.13.25",
"vxe-pc-ui": "^4.6.8",
"vxe-table": "^4.13.28",
"xe-utils": "^3.7.4",
"xlsx-js-style": "^1.2.0"
},
@ -89,11 +89,11 @@
"@iconify/vue": "^5.0.0",
"@plugin-web-update-notification/vite": "^2.0.0",
"@types/lodash-es": "^4.17.12",
"@types/node": "^20.17.46",
"@types/node": "^20.17.47",
"@types/nprogress": "^0.2.3",
"@types/sortablejs": "^1.15.8",
"@typescript-eslint/eslint-plugin": "^8.32.0",
"@typescript-eslint/parser": "^8.32.0",
"@typescript-eslint/eslint-plugin": "^8.32.1",
"@typescript-eslint/parser": "^8.32.1",
"@vitejs/plugin-vue": "^5.2.4",
"@vitejs/plugin-vue-jsx": "^4.1.2",
"@vue/compiler-sfc": "^3.5.13",
@ -106,7 +106,7 @@
"prettier": "^3.5.3",
"rollup-plugin-visualizer": "^5.14.0",
"sass": "^1.88.0",
"terser": "^5.39.0",
"terser": "^5.39.1",
"typescript": "^5.8.3",
"vite": "^6.3.5",
"vite-plugin-cdn-import": "^1.0.1",

View File

@ -41,9 +41,8 @@ connection.onreconnecting(() => {
connection.onreconnected(() => {
console.log('重连成功');
});
// 用户列表
connection.on('OnlineUserList', () => {});
// 接收消息
connection.on('ReceiveMessage', (message: any) => {
var tmpMsg = `<div style="white-space: pre-wrap;">${message.message}<div><br/>`;