feat: 扩展领域模型与配置
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user