fix: 审核领取显示用户真实姓名而非 ID

- ClaimTenantReviewCommandHandler 通过 IIdentityUserRepository 查询用户 DisplayName
- ForceClaimTenantReviewCommandHandler 同步修改
- ReleaseTenantReviewClaimCommandHandler 同步修改

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
MSuMshk
2026-02-02 20:54:14 +08:00
parent abeb352b04
commit cfb20ca0d7
3 changed files with 37 additions and 17 deletions

View File

@@ -2,6 +2,7 @@ using MediatR;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using TakeoutSaaS.Application.App.Tenants.Commands; using TakeoutSaaS.Application.App.Tenants.Commands;
using TakeoutSaaS.Application.App.Tenants.Contracts; using TakeoutSaaS.Application.App.Tenants.Contracts;
using TakeoutSaaS.Domain.Identity.Repositories;
using TakeoutSaaS.Domain.Tenants.Entities; using TakeoutSaaS.Domain.Tenants.Entities;
using TakeoutSaaS.Domain.Tenants.Enums; using TakeoutSaaS.Domain.Tenants.Enums;
using TakeoutSaaS.Domain.Tenants.Repositories; using TakeoutSaaS.Domain.Tenants.Repositories;
@@ -17,6 +18,7 @@ namespace TakeoutSaaS.Application.App.Tenants.Handlers;
/// </summary> /// </summary>
public sealed class ClaimTenantReviewCommandHandler( public sealed class ClaimTenantReviewCommandHandler(
ITenantRepository tenantRepository, ITenantRepository tenantRepository,
IIdentityUserRepository identityUserRepository,
ICurrentUserAccessor currentUserAccessor, ICurrentUserAccessor currentUserAccessor,
IIdGenerator idGenerator, IIdGenerator idGenerator,
ILogger<ClaimTenantReviewCommandHandler> logger) ILogger<ClaimTenantReviewCommandHandler> logger)
@@ -54,9 +56,14 @@ public sealed class ClaimTenantReviewCommandHandler(
// 6. 创建新的领取记录 // 6. 创建新的领取记录
var now = DateTime.UtcNow; var now = DateTime.UtcNow;
var actorName = currentUserAccessor.IsAuthenticated
? $"user:{currentUserAccessor.UserId}" // 7. 查询当前用户的显示名称
: "system"; var actorName = "system";
if (currentUserAccessor.IsAuthenticated && currentUserAccessor.UserId != 0)
{
var user = await identityUserRepository.FindByIdAsync(currentUserAccessor.UserId, cancellationToken);
actorName = user?.DisplayName ?? $"用户{currentUserAccessor.UserId}";
}
var claim = new TenantReviewClaim var claim = new TenantReviewClaim
{ {
@@ -67,10 +74,10 @@ public sealed class ClaimTenantReviewCommandHandler(
ClaimedAt = now ClaimedAt = now
}; };
// 7. 保存领取记录 // 8. 保存领取记录
await tenantRepository.AddReviewClaimAsync(claim, cancellationToken); await tenantRepository.AddReviewClaimAsync(claim, cancellationToken);
// 8. 添加审核日志 // 9. 添加审核日志
await tenantRepository.AddAuditLogAsync(new TenantAuditLog await tenantRepository.AddAuditLogAsync(new TenantAuditLog
{ {
Id = idGenerator.NextId(), Id = idGenerator.NextId(),
@@ -83,7 +90,7 @@ public sealed class ClaimTenantReviewCommandHandler(
CurrentStatus = tenant.Status CurrentStatus = tenant.Status
}, cancellationToken); }, cancellationToken);
// 9. 保存变更 // 10. 保存变更
await tenantRepository.SaveChangesAsync(cancellationToken); await tenantRepository.SaveChangesAsync(cancellationToken);
logger.LogInformation("租户 {TenantId} 审核已被 {UserId} 领取", request.TenantId, currentUserAccessor.UserId); logger.LogInformation("租户 {TenantId} 审核已被 {UserId} 领取", request.TenantId, currentUserAccessor.UserId);

View File

@@ -2,6 +2,7 @@ using MediatR;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using TakeoutSaaS.Application.App.Tenants.Commands; using TakeoutSaaS.Application.App.Tenants.Commands;
using TakeoutSaaS.Application.App.Tenants.Contracts; using TakeoutSaaS.Application.App.Tenants.Contracts;
using TakeoutSaaS.Domain.Identity.Repositories;
using TakeoutSaaS.Domain.Tenants.Entities; using TakeoutSaaS.Domain.Tenants.Entities;
using TakeoutSaaS.Domain.Tenants.Enums; using TakeoutSaaS.Domain.Tenants.Enums;
using TakeoutSaaS.Domain.Tenants.Repositories; using TakeoutSaaS.Domain.Tenants.Repositories;
@@ -17,6 +18,7 @@ namespace TakeoutSaaS.Application.App.Tenants.Handlers;
/// </summary> /// </summary>
public sealed class ForceClaimTenantReviewCommandHandler( public sealed class ForceClaimTenantReviewCommandHandler(
ITenantRepository tenantRepository, ITenantRepository tenantRepository,
IIdentityUserRepository identityUserRepository,
ICurrentUserAccessor currentUserAccessor, ICurrentUserAccessor currentUserAccessor,
IIdGenerator idGenerator, IIdGenerator idGenerator,
ILogger<ForceClaimTenantReviewCommandHandler> logger) ILogger<ForceClaimTenantReviewCommandHandler> logger)
@@ -47,9 +49,14 @@ public sealed class ForceClaimTenantReviewCommandHandler(
// 4. 创建新的领取记录 // 4. 创建新的领取记录
var now = DateTime.UtcNow; var now = DateTime.UtcNow;
var actorName = currentUserAccessor.IsAuthenticated
? $"user:{currentUserAccessor.UserId}" // 5. 查询当前用户的显示名称
: "system"; var actorName = "system";
if (currentUserAccessor.IsAuthenticated && currentUserAccessor.UserId != 0)
{
var user = await identityUserRepository.FindByIdAsync(currentUserAccessor.UserId, cancellationToken);
actorName = user?.DisplayName ?? $"用户{currentUserAccessor.UserId}";
}
var claim = new TenantReviewClaim var claim = new TenantReviewClaim
{ {
@@ -60,10 +67,10 @@ public sealed class ForceClaimTenantReviewCommandHandler(
ClaimedAt = now ClaimedAt = now
}; };
// 5. 保存领取记录 // 6. 保存领取记录
await tenantRepository.AddReviewClaimAsync(claim, cancellationToken); await tenantRepository.AddReviewClaimAsync(claim, cancellationToken);
// 6. 添加审核日志 // 7. 添加审核日志
var previousClaimInfo = existingClaim is not null ? $",原领取人:{existingClaim.ClaimedByName}" : ""; var previousClaimInfo = existingClaim is not null ? $",原领取人:{existingClaim.ClaimedByName}" : "";
await tenantRepository.AddAuditLogAsync(new TenantAuditLog await tenantRepository.AddAuditLogAsync(new TenantAuditLog
{ {
@@ -77,7 +84,7 @@ public sealed class ForceClaimTenantReviewCommandHandler(
CurrentStatus = tenant.Status CurrentStatus = tenant.Status
}, cancellationToken); }, cancellationToken);
// 7. 保存变更 // 8. 保存变更
await tenantRepository.SaveChangesAsync(cancellationToken); await tenantRepository.SaveChangesAsync(cancellationToken);
logger.LogInformation("租户 {TenantId} 审核已被 {UserId} 强制接管", request.TenantId, currentUserAccessor.UserId); logger.LogInformation("租户 {TenantId} 审核已被 {UserId} 强制接管", request.TenantId, currentUserAccessor.UserId);

View File

@@ -1,6 +1,7 @@
using MediatR; using MediatR;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using TakeoutSaaS.Application.App.Tenants.Commands; using TakeoutSaaS.Application.App.Tenants.Commands;
using TakeoutSaaS.Domain.Identity.Repositories;
using TakeoutSaaS.Domain.Tenants.Entities; using TakeoutSaaS.Domain.Tenants.Entities;
using TakeoutSaaS.Domain.Tenants.Enums; using TakeoutSaaS.Domain.Tenants.Enums;
using TakeoutSaaS.Domain.Tenants.Repositories; using TakeoutSaaS.Domain.Tenants.Repositories;
@@ -16,6 +17,7 @@ namespace TakeoutSaaS.Application.App.Tenants.Handlers;
/// </summary> /// </summary>
public sealed class ReleaseTenantReviewClaimCommandHandler( public sealed class ReleaseTenantReviewClaimCommandHandler(
ITenantRepository tenantRepository, ITenantRepository tenantRepository,
IIdentityUserRepository identityUserRepository,
ICurrentUserAccessor currentUserAccessor, ICurrentUserAccessor currentUserAccessor,
IIdGenerator idGenerator, IIdGenerator idGenerator,
ILogger<ReleaseTenantReviewClaimCommandHandler> logger) ILogger<ReleaseTenantReviewClaimCommandHandler> logger)
@@ -47,11 +49,15 @@ public sealed class ReleaseTenantReviewClaimCommandHandler(
// 4. 释放领取 // 4. 释放领取
existingClaim.ReleasedAt = DateTime.UtcNow; existingClaim.ReleasedAt = DateTime.UtcNow;
// 5. 添加审核日志 // 5. 查询当前用户的显示名称
var actorName = currentUserAccessor.IsAuthenticated var actorName = "system";
? $"user:{currentUserAccessor.UserId}" if (currentUserAccessor.IsAuthenticated && currentUserAccessor.UserId != 0)
: "system"; {
var user = await identityUserRepository.FindByIdAsync(currentUserAccessor.UserId, cancellationToken);
actorName = user?.DisplayName ?? $"用户{currentUserAccessor.UserId}";
}
// 6. 添加审核日志
await tenantRepository.AddAuditLogAsync(new TenantAuditLog await tenantRepository.AddAuditLogAsync(new TenantAuditLog
{ {
Id = idGenerator.NextId(), Id = idGenerator.NextId(),
@@ -64,7 +70,7 @@ public sealed class ReleaseTenantReviewClaimCommandHandler(
CurrentStatus = tenant.Status CurrentStatus = tenant.Status
}, cancellationToken); }, cancellationToken);
// 6. 保存变更 // 7. 保存变更
await tenantRepository.SaveChangesAsync(cancellationToken); await tenantRepository.SaveChangesAsync(cancellationToken);
logger.LogInformation("租户 {TenantId} 审核已被 {UserId} 释放", request.TenantId, currentUserAccessor.UserId); logger.LogInformation("租户 {TenantId} 审核已被 {UserId} 释放", request.TenantId, currentUserAccessor.UserId);