INotifyPusher.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. namespace Admin.NET.Plugin.ApprovalFlow.Service;
  2. /// <summary>
  3. /// 审批流通知推送器抽象(P4-16)
  4. /// 每种渠道一个实现,注册到 DI 容器,由 FlowNotifyService 按配置 + 启用状态并行调度。
  5. /// </summary>
  6. public interface INotifyPusher
  7. {
  8. /// <summary>
  9. /// 渠道名(SignalR / Email / Sms / DingTalk / WorkWeixin),与 NotifyChannelConfig 属性名一致
  10. /// </summary>
  11. string Channel { get; }
  12. /// <summary>
  13. /// 根据配置判断当前渠道是否启用
  14. /// </summary>
  15. bool IsEnabled(NotifyChannelConfig cfg);
  16. /// <summary>
  17. /// 实际推送
  18. /// </summary>
  19. /// <param name="userIds">目标用户 Id 列表(SignalR/Email/Sms 直接定位人;DingTalk/WorkWeixin Webhook 忽略,由群机器人向群成员广播)</param>
  20. /// <param name="notification">通知载荷</param>
  21. /// <returns>推送结果(含是否成功、目标数、耗时、错误)</returns>
  22. Task<FlowNotifyPushResult> PushAsync(List<long> userIds, FlowNotification notification);
  23. }
  24. /// <summary>
  25. /// 单次推送结果
  26. /// </summary>
  27. public class FlowNotifyPushResult
  28. {
  29. public bool Success { get; set; }
  30. public int ActualTargetCount { get; set; }
  31. public string? ErrorMessage { get; set; }
  32. public static FlowNotifyPushResult Ok(int count) => new() { Success = true, ActualTargetCount = count };
  33. public static FlowNotifyPushResult Fail(string error) => new() { Success = false, ErrorMessage = error };
  34. }