feat: 扩展领域模型与配置

This commit is contained in:
贺爱泽
2025-12-01 13:26:05 +08:00
parent a08804658b
commit 5ddad07658
148 changed files with 8519 additions and 2 deletions

View File

@@ -0,0 +1,45 @@
using TakeoutSaaS.Domain.CustomerService.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.CustomerService.Entities;
/// <summary>
/// 会话消息。
/// </summary>
public sealed class ChatMessage : MultiTenantEntityBase
{
/// <summary>
/// 会话标识。
/// </summary>
public Guid ChatSessionId { get; set; }
/// <summary>
/// 发送方类型。
/// </summary>
public MessageSenderType SenderType { get; set; } = MessageSenderType.Customer;
/// <summary>
/// 发送方用户 ID。
/// </summary>
public Guid? SenderUserId { get; set; }
/// <summary>
/// 消息内容。
/// </summary>
public string Content { get; set; } = string.Empty;
/// <summary>
/// 消息类型(文字/图片/语音等)。
/// </summary>
public string ContentType { get; set; } = "text/plain";
/// <summary>
/// 是否已读。
/// </summary>
public bool IsRead { get; set; }
/// <summary>
/// 读取时间。
/// </summary>
public DateTime? ReadAt { get; set; }
}

View File

@@ -0,0 +1,50 @@
using TakeoutSaaS.Domain.CustomerService.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.CustomerService.Entities;
/// <summary>
/// 客服会话。
/// </summary>
public sealed class ChatSession : MultiTenantEntityBase
{
/// <summary>
/// 会话编号。
/// </summary>
public string SessionCode { get; set; } = string.Empty;
/// <summary>
/// 顾客用户 ID。
/// </summary>
public Guid CustomerUserId { get; set; }
/// <summary>
/// 当前客服员工 ID。
/// </summary>
public Guid? AgentUserId { get; set; }
/// <summary>
/// 所属门店(可空为平台)。
/// </summary>
public Guid? StoreId { get; set; }
/// <summary>
/// 会话状态。
/// </summary>
public ChatSessionStatus Status { get; set; } = ChatSessionStatus.Waiting;
/// <summary>
/// 是否机器人接待中。
/// </summary>
public bool IsBotActive { get; set; }
/// <summary>
/// 开始时间。
/// </summary>
public DateTime StartedAt { get; set; } = DateTime.UtcNow;
/// <summary>
/// 结束时间。
/// </summary>
public DateTime? EndedAt { get; set; }
}

View File

@@ -0,0 +1,55 @@
using TakeoutSaaS.Domain.CustomerService.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.CustomerService.Entities;
/// <summary>
/// 客服工单。
/// </summary>
public sealed class SupportTicket : MultiTenantEntityBase
{
/// <summary>
/// 工单编号。
/// </summary>
public string TicketNo { get; set; } = string.Empty;
/// <summary>
/// 客户用户 ID。
/// </summary>
public Guid CustomerUserId { get; set; }
/// <summary>
/// 关联订单(如有)。
/// </summary>
public Guid? OrderId { get; set; }
/// <summary>
/// 工单主题。
/// </summary>
public string Subject { get; set; } = string.Empty;
/// <summary>
/// 工单详情。
/// </summary>
public string Description { get; set; } = string.Empty;
/// <summary>
/// 优先级。
/// </summary>
public TicketPriority Priority { get; set; } = TicketPriority.Normal;
/// <summary>
/// 状态。
/// </summary>
public TicketStatus Status { get; set; } = TicketStatus.Open;
/// <summary>
/// 指派的客服。
/// </summary>
public Guid? AssignedAgentId { get; set; }
/// <summary>
/// 关闭时间。
/// </summary>
public DateTime? ClosedAt { get; set; }
}

View File

@@ -0,0 +1,34 @@
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.CustomerService.Entities;
/// <summary>
/// 工单评论/流转记录。
/// </summary>
public sealed class TicketComment : MultiTenantEntityBase
{
/// <summary>
/// 工单标识。
/// </summary>
public Guid SupportTicketId { get; set; }
/// <summary>
/// 评论人 ID。
/// </summary>
public Guid? AuthorUserId { get; set; }
/// <summary>
/// 评论内容。
/// </summary>
public string Content { get; set; } = string.Empty;
/// <summary>
/// 是否内部备注。
/// </summary>
public bool IsInternal { get; set; }
/// <summary>
/// 附件 JSON。
/// </summary>
public string? AttachmentsJson { get; set; }
}

View File

@@ -0,0 +1,27 @@
namespace TakeoutSaaS.Domain.CustomerService.Enums;
/// <summary>
/// 客服会话状态。
/// </summary>
public enum ChatSessionStatus
{
/// <summary>
/// 等待客服接入。
/// </summary>
Waiting = 0,
/// <summary>
/// 聊天进行中。
/// </summary>
Active = 1,
/// <summary>
/// 已转人工排队。
/// </summary>
Queueing = 2,
/// <summary>
/// 已结束。
/// </summary>
Closed = 3
}

View File

@@ -0,0 +1,27 @@
namespace TakeoutSaaS.Domain.CustomerService.Enums;
/// <summary>
/// 消息发送方类型。
/// </summary>
public enum MessageSenderType
{
/// <summary>
/// 顾客。
/// </summary>
Customer = 0,
/// <summary>
/// 客服人员。
/// </summary>
Agent = 1,
/// <summary>
/// 机器人。
/// </summary>
Bot = 2,
/// <summary>
/// 系统通知。
/// </summary>
System = 3
}

View File

@@ -0,0 +1,22 @@
namespace TakeoutSaaS.Domain.CustomerService.Enums;
/// <summary>
/// 工单优先级。
/// </summary>
public enum TicketPriority
{
/// <summary>
/// 普通。
/// </summary>
Normal = 0,
/// <summary>
/// 高。
/// </summary>
High = 1,
/// <summary>
/// 紧急。
/// </summary>
Urgent = 2
}

View File

@@ -0,0 +1,32 @@
namespace TakeoutSaaS.Domain.CustomerService.Enums;
/// <summary>
/// 工单状态。
/// </summary>
public enum TicketStatus
{
/// <summary>
/// 新建未处理。
/// </summary>
Open = 0,
/// <summary>
/// 处理中。
/// </summary>
InProgress = 1,
/// <summary>
/// 等待客户反馈。
/// </summary>
PendingCustomer = 2,
/// <summary>
/// 已解决。
/// </summary>
Resolved = 3,
/// <summary>
/// 已关闭。
/// </summary>
Closed = 4
}