Developer 058d8edffa 添加通知系统和工作任务分配功能
- 新增通知系统完整架构,包含通知设置、历史记录、任务管理等核心功能
- 实现工作任务分配服务,支持人员和设备的智能分配
- 添加人员分组管理功能,支持灵活的通知目标配置
- 完善相关枚举定义和数据传输对象

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-05 08:34:01 +08:00

257 lines
7.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using ZhonTai.Admin.Core.Dto;
using NPP.SmartSchedue.Api.Contracts.Services.Notification.Input;
using NPP.SmartSchedue.Api.Contracts.Services.Notification.Output;
using NPP.SmartSchedue.Api.Contracts.Core.Enums;
namespace NPP.SmartSchedue.Api.Contracts.Services.Notification;
/// <summary>
/// 通知服务接口
/// 决策点6定时任务支持定时检查和触发通知
/// 决策点7模板通知支持通知内容模板可替换变量
/// </summary>
public interface INotificationService
{
#region
/// <summary>
/// 查询通知设置
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<NotificationSettingOutput> GetNotificationSettingAsync(long id);
/// <summary>
/// 查询通知设置分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<PageOutput<NotificationSettingOutput>> GetNotificationSettingPageAsync(PageInput<NotificationSettingCreateInput> input);
/// <summary>
/// 创建通知设置
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<long> CreateNotificationSettingAsync(NotificationSettingCreateInput input);
/// <summary>
/// 更新通知设置
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task UpdateNotificationSettingAsync(NotificationSettingUpdateInput input);
/// <summary>
/// 删除通知设置
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task DeleteNotificationSettingAsync(long id);
/// <summary>
/// 启用/禁用通知设置
/// </summary>
/// <param name="id"></param>
/// <param name="enabled"></param>
/// <returns></returns>
Task ToggleNotificationSettingAsync(long id, bool enabled);
#endregion
#region
/// <summary>
/// 查询人员组
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<PersonnelGroupOutput> GetPersonnelGroupAsync(long id);
/// <summary>
/// 查询人员组分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<PageOutput<PersonnelGroupOutput>> GetPersonnelGroupPageAsync(PageInput<PersonnelGroupCreateInput> input);
/// <summary>
/// 创建人员组
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<long> CreatePersonnelGroupAsync(PersonnelGroupCreateInput input);
/// <summary>
/// 更新人员组
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task UpdatePersonnelGroupAsync(PersonnelGroupCreateInput input);
/// <summary>
/// 删除人员组
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task DeletePersonnelGroupAsync(long id);
/// <summary>
/// 获取人员组的实际人员列表
/// 根据决策点4混合人员组支持静态+动态规则
/// </summary>
/// <param name="personnelGroupId"></param>
/// <returns></returns>
Task<List<long>> GetPersonnelGroupMembersAsync(long personnelGroupId);
#endregion
#region
/// <summary>
/// 发送通知
/// 决策点1支持邮件和系统消息通知
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<SendNotificationOutput> SendNotificationAsync(SendNotificationInput input);
/// <summary>
/// 批量发送通知
/// </summary>
/// <param name="inputs"></param>
/// <returns></returns>
Task<List<SendNotificationOutput>> BatchSendNotificationAsync(List<SendNotificationInput> inputs);
/// <summary>
/// 根据通知设置发送通知
/// </summary>
/// <param name="notificationSettingId">通知设置ID</param>
/// <param name="businessType">业务类型</param>
/// <param name="businessId">业务ID</param>
/// <param name="businessData">业务数据</param>
/// <param name="templateVariables">模板变量(用于替换模板中的占位符)</param>
/// <returns></returns>
Task<SendNotificationOutput> SendNotificationBySettingAsync(
long notificationSettingId,
string businessType,
long? businessId = null,
string businessData = "",
Dictionary<string, string> templateVariables = null);
#endregion
#region 7
/// <summary>
/// 渲染通知模板
/// 支持通知内容模板,可替换变量
/// </summary>
/// <param name="template">模板内容</param>
/// <param name="variables">变量字典</param>
/// <returns></returns>
Task<string> RenderTemplateAsync(string template, Dictionary<string, string> variables);
/// <summary>
/// 验证模板语法
/// </summary>
/// <param name="template">模板内容</param>
/// <returns></returns>
Task<bool> ValidateTemplateAsync(string template);
#endregion
#region 8
/// <summary>
/// 查询通知历史记录
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<NotificationHistoryOutput> GetNotificationHistoryAsync(long id);
/// <summary>
/// 查询通知历史记录分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<PageOutput<NotificationHistoryOutput>> GetNotificationHistoryPageAsync(PageInput<NotificationHistoryOutput> input);
/// <summary>
/// 重试失败的通知
/// </summary>
/// <param name="notificationHistoryId"></param>
/// <returns></returns>
Task<bool> RetryFailedNotificationAsync(long notificationHistoryId);
/// <summary>
/// 批量重试失败的通知
/// </summary>
/// <param name="notificationHistoryIds"></param>
/// <returns></returns>
Task<int> BatchRetryFailedNotificationsAsync(List<long> notificationHistoryIds);
#endregion
#region 6
/// <summary>
/// 创建定时通知任务
/// </summary>
/// <param name="notificationSettingId">通知设置ID</param>
/// <param name="businessType">业务类型</param>
/// <param name="businessId">业务ID</param>
/// <param name="businessData">业务数据</param>
/// <param name="plannedExecutionTime">计划执行时间</param>
/// <param name="cronExpression">Cron表达式可选</param>
/// <returns></returns>
Task<long> CreateScheduledNotificationTaskAsync(
long notificationSettingId,
string businessType,
long? businessId = null,
string businessData = "",
DateTime? plannedExecutionTime = null,
string cronExpression = "");
/// <summary>
/// 执行定时通知任务
/// </summary>
/// <param name="taskId">任务ID</param>
/// <returns></returns>
Task<bool> ExecuteScheduledNotificationTaskAsync(long taskId);
/// <summary>
/// 获取待执行的定时任务列表
/// </summary>
/// <returns></returns>
Task<List<long>> GetPendingNotificationTasksAsync();
/// <summary>
/// 启用/禁用定时任务
/// </summary>
/// <param name="taskId"></param>
/// <param name="enabled"></param>
/// <returns></returns>
Task ToggleNotificationTaskAsync(long taskId, bool enabled);
#endregion
#region
/// <summary>
/// 获取通知发送统计信息
/// </summary>
/// <param name="startTime">开始时间</param>
/// <param name="endTime">结束时间</param>
/// <param name="notificationSettingId">通知设置ID可选</param>
/// <returns></returns>
Task<Dictionary<string, object>> GetNotificationStatisticsAsync(
DateTime startTime,
DateTime endTime,
long? notificationSettingId = null);
#endregion
}