refactor: 清理平台表述并统一为系统

This commit is contained in:
root
2026-01-29 13:49:03 +00:00
parent b3d611304b
commit 52fb4fde72
30 changed files with 44 additions and 84 deletions

View File

@@ -30,7 +30,7 @@ public sealed class CreatePaymentCommand : IRequest<PaymentDto>
public decimal Amount { get; set; }
/// <summary>
/// 平台交易号。
/// 系统交易号。
/// </summary>
public string? TradeNo { get; set; }

View File

@@ -35,7 +35,7 @@ public sealed record UpdatePaymentCommand : IRequest<PaymentDto?>
public decimal Amount { get; init; }
/// <summary>
/// 平台交易号。
/// 系统交易号。
/// </summary>
public string? TradeNo { get; init; }

View File

@@ -43,7 +43,7 @@ public sealed class PaymentDto
public decimal Amount { get; init; }
/// <summary>
/// 平台交易号。
/// 系统交易号。
/// </summary>
public string? TradeNo { get; init; }

View File

@@ -37,7 +37,7 @@ public sealed class ToggleBusinessStatusCommandHandler(
if (store.BusinessStatus == StoreBusinessStatus.ForceClosed)
{
throw new BusinessException(ErrorCodes.Conflict, "门店已被平台强制关闭,无法切换");
throw new BusinessException(ErrorCodes.Conflict, "门店已被风控强制关闭,无法切换");
}
// 2. (空行后) 应用状态变更

View File

@@ -71,7 +71,7 @@ public sealed class TenantPackageDto
public string? FeaturePoliciesJson { get; init; }
/// <summary>
/// 是否仍启用(平台控制)。
/// 是否仍启用(系统控制)。
/// </summary>
public bool IsActive { get; init; }

View File

@@ -29,7 +29,7 @@ public sealed class CreateTenantAnnouncementCommandHandler(
/// <returns>公告 DTO。</returns>
public async Task<TenantAnnouncementDto> Handle(CreateTenantAnnouncementCommand request, CancellationToken cancellationToken)
{
// 1. 校验租户上下文(租户端禁止跨租户/平台公告)
// 1. 校验租户上下文(租户端禁止跨租户/系统公告)
var currentTenantId = tenantProvider.GetCurrentTenantId();
if (currentTenantId <= 0)
{
@@ -51,7 +51,7 @@ public sealed class CreateTenantAnnouncementCommandHandler(
// 4. (空行后) 校验公告发布范围:租户端仅允许租户公告
if (request.PublisherScope != PublisherScope.Tenant)
{
throw new BusinessException(ErrorCodes.ValidationFailed, "租户端允许创建平台公告");
throw new BusinessException(ErrorCodes.ValidationFailed, "租户端允许创建租户公告");
}
if (string.IsNullOrWhiteSpace(request.TargetType))

View File

@@ -35,7 +35,7 @@ public sealed class CreateAnnouncementCommandValidator : AbstractValidator<Creat
RuleFor(x => x.PublisherScope)
.Equal(PublisherScope.Tenant)
.WithMessage("租户端允许创建平台公告");
.WithMessage("租户端允许创建租户公告");
RuleFor(x => x.EffectiveFrom)
.LessThan(x => x.EffectiveTo!.Value)

View File

@@ -26,7 +26,7 @@ public sealed class CurrentUserProfile
public long TenantId { get; init; }
/// <summary>
/// 所属商户 ID平台管理员为空)。
/// 所属商户 ID租户管理员为空)。
/// </summary>
public long? MerchantId { get; init; }

View File

@@ -288,7 +288,7 @@ public sealed class AdminAuthService(
{
var tenantId = user.TenantId;
var roles = await ResolveUserRolesAsync(tenantId, user.Id, cancellationToken);
// 1. 强制仅允许租户管理员登录(平台不允许超级管理员)
// 1. 强制仅允许租户管理员登录(不支持超级管理员)
EnsureTenantAdmin(tenantId, roles);
// 2. 加载权限并返回档案
var permissions = await ResolveUserPermissionsAsync(tenantId, user.Id, cancellationToken);

View File

@@ -24,7 +24,7 @@ public sealed class ChatSession : MultiTenantEntityBase
public long? AgentUserId { get; set; }
/// <summary>
/// 所属门店(可空为平台)。
/// 所属门店(可空为系统会话)。
/// </summary>
public long? StoreId { get; set; }

View File

@@ -9,7 +9,7 @@ namespace TakeoutSaaS.Domain.Distribution.Entities;
public sealed class AffiliatePartner : MultiTenantEntityBase
{
/// <summary>
/// 用户 ID如绑定平台账号)。
/// 用户 ID如绑定登录账号)。
/// </summary>
public long? UserId { get; set; }

View File

@@ -4,7 +4,7 @@ using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Identity.Entities;
/// <summary>
/// 管理后台账户实体(平台管理员、租户管理员或商户员工)。
/// 管理后台账户实体(租户管理员或商户员工)。
/// </summary>
public sealed class IdentityUser : MultiTenantEntityBase
{
@@ -59,7 +59,7 @@ public sealed class IdentityUser : MultiTenantEntityBase
public bool MustChangePassword { get; set; }
/// <summary>
/// 所属商户(平台管理员为空)。
/// 所属商户(租户管理员为空)。
/// </summary>
public long? MerchantId { get; set; }

View File

@@ -3,7 +3,7 @@ using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Identity.Entities;
/// <summary>
/// 角色模板定义(平台级)。
/// 角色模板定义(系统级)。
/// </summary>
public sealed class RoleTemplate : AuditableEntityBase
{

View File

@@ -3,7 +3,7 @@ using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Identity.Entities;
/// <summary>
/// 角色模板-权限关系(平台级)。
/// 角色模板-权限关系(系统级)。
/// </summary>
public sealed class RoleTemplatePermission : AuditableEntityBase
{

View File

@@ -35,16 +35,6 @@ public enum MerchantAuditAction
/// </summary>
MerchantReviewed = 5,
/// <summary>
/// 领取审核。
/// </summary>
ReviewClaimed = 6,
/// <summary>
/// 释放审核。
/// </summary>
ReviewReleased = 7,
/// <summary>
/// 审核通过。
/// </summary>
@@ -63,10 +53,5 @@ public enum MerchantAuditAction
/// <summary>
/// 关键信息变更进入待审核。
/// </summary>
ReviewPendingReApproval = 11,
/// <summary>
/// 强制接管审核。
/// </summary>
ReviewForceClaimed = 12
ReviewPendingReApproval = 11
}

View File

@@ -29,7 +29,7 @@ public sealed class PaymentRecord : MultiTenantEntityBase
public decimal Amount { get; set; }
/// <summary>
/// 平台交易号。
/// 系统交易号。
/// </summary>
public string? TradeNo { get; set; }

View File

@@ -16,7 +16,7 @@ public enum StoreBusinessStatus
Resting = 1,
/// <summary>
/// 强制关闭(平台风控)。
/// 强制关闭(风控)。
/// </summary>
ForceClosed = 2
}

View File

@@ -36,9 +36,9 @@ public enum StoreClosureReason
LicenseExpired = 5,
/// <summary>
/// 平台封禁。
/// 风控封禁。
/// </summary>
PlatformSuspended = 6,
RiskSuspended = 6,
/// <summary>
/// 其他原因。

View File

@@ -4,7 +4,7 @@ using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Tenants.Entities;
/// <summary>
/// 配额包定义(平台提供的可购买配额包)。
/// 配额包定义(系统提供的可购买配额包)。
/// </summary>
public sealed class QuotaPackage : AuditableEntityBase
{

View File

@@ -44,7 +44,7 @@ public sealed class TenantAnnouncement : MultiTenantEntityBase
public PublisherScope PublisherScope { get; set; }
/// <summary>
/// 发布者用户 ID平台或租户后台账号)。
/// 发布者用户 ID系统或租户后台账号)。
/// </summary>
public long? PublisherUserId { get; set; }

View File

@@ -4,7 +4,7 @@ using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Tenants.Entities;
/// <summary>
/// 平台提供的租户套餐定义。
/// 系统提供的租户套餐定义。
/// </summary>
public sealed class TenantPackage : AuditableEntityBase
{
@@ -64,7 +64,7 @@ public sealed class TenantPackage : AuditableEntityBase
public string? FeaturePoliciesJson { get; set; }
/// <summary>
/// 是否仍启用(平台控制)。
/// 是否仍启用(系统控制)。
/// </summary>
public bool IsActive { get; set; } = true;

View File

@@ -6,9 +6,9 @@ namespace TakeoutSaaS.Domain.Tenants.Enums;
public enum PublisherScope
{
/// <summary>
/// 平台发布。
/// 系统发布。
/// </summary>
Platform = 0,
System = 0,
/// <summary>
/// 租户发布。

View File

@@ -21,9 +21,9 @@ public enum TenantAnnouncementType
Operation = 2,
/// <summary>
/// 平台系统更新公告。
/// 系统更新公告。
/// </summary>
SYSTEM_PLATFORM_UPDATE = 3,
SYSTEM_PRODUCT_UPDATE = 3,
/// <summary>
/// 系统安全公告。

View File

@@ -39,29 +39,4 @@ public enum TenantAuditAction
/// 租户状态变更(启用/停用/到期等)。
/// </summary>
StatusChanged = 7,
/// <summary>
/// 领取入驻审核。
/// </summary>
ReviewClaimed = 8,
/// <summary>
/// 强制接管入驻审核。
/// </summary>
ReviewForceClaimed = 9,
/// <summary>
/// 释放入驻审核(审核完成或手动释放)。
/// </summary>
ReviewClaimReleased = 10,
/// <summary>
/// 平台伪装登录租户。
/// </summary>
ImpersonatedLogin = 11,
/// <summary>
/// 生成主管理员重置链接。
/// </summary>
AdminResetLinkIssued = 12
}

View File

@@ -15,7 +15,7 @@ public interface ISubscriptionRepository
/// </summary>
/// <param name="subscriptionId">订阅 ID。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于平台级查询/任务)。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于系统级任务)。</param>
/// <returns>订阅实体,未找到返回 null。</returns>
Task<TenantSubscription?> FindByIdAsync(
long subscriptionId,
@@ -27,7 +27,7 @@ public interface ISubscriptionRepository
/// </summary>
/// <param name="subscriptionIds">订阅 ID 列表。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于平台级查询/任务)。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于系统级任务)。</param>
/// <returns>订阅实体列表。</returns>
Task<IReadOnlyList<TenantSubscription>> FindByIdsAsync(
IEnumerable<long> subscriptionIds,
@@ -39,7 +39,7 @@ public interface ISubscriptionRepository
/// </summary>
/// <param name="filter">查询过滤条件。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于平台级查询/任务)。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于系统级任务)。</param>
/// <returns>分页结果。</returns>
Task<(IReadOnlyList<SubscriptionWithRelations> Items, int Total)> SearchPagedAsync(
SubscriptionSearchFilter filter,
@@ -51,7 +51,7 @@ public interface ISubscriptionRepository
/// </summary>
/// <param name="subscriptionId">订阅 ID。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于平台级查询/任务)。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于系统级任务)。</param>
/// <returns>订阅详情信息。</returns>
Task<SubscriptionDetailInfo?> GetDetailAsync(
long subscriptionId,
@@ -63,7 +63,7 @@ public interface ISubscriptionRepository
/// </summary>
/// <param name="subscriptionIds">订阅 ID 列表。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于平台级查询/任务)。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于系统级任务)。</param>
/// <returns>订阅与租户信息列表。</returns>
Task<IReadOnlyList<SubscriptionWithTenant>> FindByIdsWithTenantAsync(
IEnumerable<long> subscriptionIds,
@@ -76,7 +76,7 @@ public interface ISubscriptionRepository
/// <param name="now">当前时间UTC。</param>
/// <param name="renewalThreshold">续费阈值时间UTC到期时间小于等于该时间视为候选。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于平台级查询/任务)。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于系统级任务)。</param>
/// <returns>候选订阅集合(含套餐信息)。</returns>
Task<IReadOnlyList<AutoRenewalCandidate>> FindAutoRenewalCandidatesAsync(
DateTime now,
@@ -90,7 +90,7 @@ public interface ISubscriptionRepository
/// <param name="startOfDay">筛选开始时间UTC。</param>
/// <param name="endOfDay">筛选结束时间UTC不含。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于平台级查询/任务)。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于系统级任务)。</param>
/// <returns>候选订阅集合(含租户与套餐信息)。</returns>
Task<IReadOnlyList<RenewalReminderCandidate>> FindRenewalReminderCandidatesAsync(
DateTime startOfDay,
@@ -103,7 +103,7 @@ public interface ISubscriptionRepository
/// </summary>
/// <param name="now">当前时间UTC。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于平台级查询/任务)。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于系统级任务)。</param>
/// <returns>到期订阅集合。</returns>
Task<IReadOnlyList<TenantSubscription>> FindExpiredActiveSubscriptionsAsync(
DateTime now,
@@ -116,7 +116,7 @@ public interface ISubscriptionRepository
/// <param name="now">当前时间UTC。</param>
/// <param name="gracePeriodDays">宽限期天数。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于平台级查询/任务)。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于系统级任务)。</param>
/// <returns>宽限期到期订阅集合。</returns>
Task<IReadOnlyList<TenantSubscription>> FindGracePeriodExpiredSubscriptionsAsync(
DateTime now,
@@ -177,7 +177,7 @@ public interface ISubscriptionRepository
/// </summary>
/// <param name="tenantId">租户 ID。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于平台级查询/任务)。</param>
/// <param name="ignoreTenantFilter">是否忽略租户过滤(用于系统级任务)。</param>
/// <returns>配额使用列表。</returns>
Task<IReadOnlyList<TenantQuotaUsage>> GetQuotaUsagesAsync(
long tenantId,

View File

@@ -46,7 +46,7 @@ ON CONFLICT ("TenantId", "Code") DO NOTHING;
INSERT INTO dictionary_items ("Id", "TenantId", "GroupId", "Key", "Value", "IsDefault", "IsEnabled", "SortOrder", "Description", "CreatedAt", "CreatedBy")
VALUES
(10031, 0, 1003, 'PLATFORM_DELIVERY', '{"zh-CN":"平台配送","en":"Platform Delivery"}', true, true, 10, '平台自有骑手配送', CURRENT_TIMESTAMP, 0),
(10031, 0, 1003, 'SYSTEM_DELIVERY', '{"zh-CN":"系统配送","en":"System Delivery"}', true, true, 10, '系统自有骑手配送', CURRENT_TIMESTAMP, 0),
(10032, 0, 1003, 'MERCHANT_DELIVERY', '{"zh-CN":"商家配送","en":"Merchant Delivery"}', false, true, 20, '商家自行配送', CURRENT_TIMESTAMP, 0),
(10033, 0, 1003, 'SELF_PICKUP', '{"zh-CN":"到店自取","en":"Self Pickup"}', false, true, 30, '顾客到店自取', CURRENT_TIMESTAMP, 0)
ON CONFLICT ("TenantId", "GroupId", "Key") DO NOTHING;

View File

@@ -52,7 +52,7 @@ public sealed class SeedUserOptions
public long TenantId { get; set; }
/// <summary>
/// 所属商户 ID平台管理员为空)。
/// 所属商户 ID租户管理员为空)。
/// </summary>
public long? MerchantId { get; set; }

View File

@@ -35,7 +35,7 @@ public sealed class IdentityDbContext(
public DbSet<Role> Roles => Set<Role>();
/// <summary>
/// 角色模板集合(平台级)。
/// 角色模板集合(系统级)。
/// </summary>
public DbSet<RoleTemplate> RoleTemplates => Set<RoleTemplate>();

View File

@@ -11,7 +11,7 @@ public sealed class SmsSendResult
public bool Success { get; init; }
/// <summary>
/// 平台返回的请求标识。
/// 服务商返回的请求标识。
/// </summary>
public string? RequestId { get; init; }

View File

@@ -84,7 +84,7 @@ public sealed class CreateAnnouncementCommandValidatorTests
// Arrange
var command = AnnouncementTestData.CreateValidCreateCommand() with
{
PublisherScope = PublisherScope.Platform
PublisherScope = PublisherScope.System
};
// Act