Files
29WxOrder/OrderSupportTicket/Models/TicketRealtimeNotification.cs
T
2026-10-17 18:18:05 +08:00

134 lines
3.4 KiB
C#

using System.Runtime.Serialization;
namespace OrderSupportTicket.Models;
/// <summary>
/// SSE 实时通知。通知只包含摘要定位信息,收到后需要重新查询对应工单。
/// </summary>
[DataContract]
public sealed class TicketRealtimeNotification
{
/// <summary>
/// 服务端事件 ID,用于至少一次投递时的去重。
/// </summary>
[DataMember(Name = "eventId")]
public string EventId { get; set; }
/// <summary>
/// 事件类型,例如 relay.ticket.message_added 或 resync_required。
/// </summary>
[DataMember(Name = "type")]
public string Type { get; set; }
/// <summary>
/// 发生变更的店铺 APPID。
/// </summary>
[DataMember(Name = "appId")]
public string AppId { get; set; }
/// <summary>
/// 发生变更的微信订单号,保持为数字字符串。
/// </summary>
[DataMember(Name = "wechatOrderId")]
public string WechatOrderId { get; set; }
/// <summary>
/// 新增消息的消息 ID。
/// </summary>
[DataMember(Name = "messageId")]
public string MessageId { get; set; }
/// <summary>
/// 工单版本号,按服务端返回的字符串原样保存。
/// </summary>
[DataMember(Name = "version")]
public string Version { get; set; }
/// <summary>
/// 事件发生时间,保留服务端 ISO 8601 字符串。
/// </summary>
[DataMember(Name = "occurredAt")]
public string OccurredAt { get; set; }
/// <summary>
/// 是否要求客户端执行全量重新同步。
/// </summary>
public bool IsResyncRequired =>
string.Equals(Type, "resync_required", System.StringComparison.OrdinalIgnoreCase);
}
/// <summary>
/// SSE 连接状态。
/// </summary>
public enum TicketRealtimeState
{
/// <summary>
/// 未连接。
/// </summary>
Disconnected,
/// <summary>
/// 正在建立连接。
/// </summary>
Connecting,
/// <summary>
/// 已连接并接收事件。
/// </summary>
Connected,
/// <summary>
/// 连接中断,正在自动重连。
/// </summary>
Reconnecting
}
/// <summary>
/// SSE 通知事件参数。
/// </summary>
public sealed class TicketRealtimeNotificationEventArgs : System.EventArgs
{
/// <summary>
/// 创建 SSE 通知事件参数。
/// </summary>
/// <param name="notification">收到的 SSE 通知。</param>
public TicketRealtimeNotificationEventArgs(TicketRealtimeNotification notification)
{
Notification = notification;
}
/// <summary>
/// 收到的 SSE 通知。
/// </summary>
public TicketRealtimeNotification Notification { get; }
}
/// <summary>
/// SSE 连接状态变化事件参数。
/// </summary>
public sealed class TicketRealtimeStateChangedEventArgs : System.EventArgs
{
/// <summary>
/// 创建 SSE 连接状态变化事件参数。
/// </summary>
/// <param name="state">变化后的连接状态。</param>
/// <param name="message">可选的连接状态说明。</param>
public TicketRealtimeStateChangedEventArgs(
TicketRealtimeState state,
string message = null)
{
State = state;
Message = message;
}
/// <summary>
/// 变化后的连接状态。
/// </summary>
public TicketRealtimeState State { get; }
/// <summary>
/// 连接状态说明。
/// </summary>
public string Message { get; }
}