diff --git a/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.EventBus/LINGYUN/Abp/BackgroundTasks/EventBus/JobDeleteEventData.cs b/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.EventBus/LINGYUN/Abp/BackgroundTasks/EventBus/JobDeleteEventData.cs new file mode 100644 index 000000000..f3acb9b23 --- /dev/null +++ b/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.EventBus/LINGYUN/Abp/BackgroundTasks/EventBus/JobDeleteEventData.cs @@ -0,0 +1,10 @@ +using System; +using Volo.Abp.EventBus; + +namespace LINGYUN.Abp.BackgroundTasks.EventBus; + +[Serializable] +[EventName("abp.background-tasks.job.delete")] +public class JobDeleteEventData : JobEventData +{ +} diff --git a/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.EventBus/LINGYUN/Abp/BackgroundTasks/EventBus/JobSynchronizer.cs b/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.EventBus/LINGYUN/Abp/BackgroundTasks/EventBus/JobSynchronizer.cs index 62df68a31..f9007944d 100644 --- a/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.EventBus/LINGYUN/Abp/BackgroundTasks/EventBus/JobSynchronizer.cs +++ b/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.EventBus/LINGYUN/Abp/BackgroundTasks/EventBus/JobSynchronizer.cs @@ -10,6 +10,7 @@ public class JobSynchronizer : IDistributedEventHandler, IDistributedEventHandler, IDistributedEventHandler, + IDistributedEventHandler, ITransientDependency { protected IJobStore JobStore { get; } @@ -115,4 +116,22 @@ public class JobSynchronizer : } } } + + public async virtual Task HandleEventAsync(JobDeleteEventData eventData) + { + if (string.Equals(eventData.NodeName, BackgroundTasksOptions.NodeName)) + { + foreach (var jobId in eventData.IdList) + { + var jobInfo = await JobStore.FindAsync(jobId); + + if (jobInfo == null) + { + continue; + } + + await JobScheduler.RemoveAsync(jobInfo); + } + } + } } diff --git a/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/en.json b/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/en.json index 1fc9ec0d9..730a8efd7 100644 --- a/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/en.json +++ b/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/en.json @@ -21,6 +21,7 @@ "DisplayName:Group": "Group", "DisplayName:Name": "Name", "DisplayName:Description": "Description", + "DisplayName:NodeName": "Node Name", "DisplayName:Type": "Type", "Description:Type": "Type of job implementer, format: type full name, assembly, example: System.String, mscorlib", "DisplayName:Status": "Status", @@ -88,6 +89,11 @@ "BackgroundJobs:Copy": "Copy Jobs", "BasicInfo": "Basic", "Paramters": "Paramters", - "MultipleSelectJobsWillBeDeletedMessage": "Multiple jobs selected will be deleted!" + "MultipleSelectJobsWillBeDeletedMessage": "Multiple jobs selected will be deleted!", + "SelectJobWillBePauseMessage": "The selected job will be paused!", + "SelectJobWillBeResumeMessage": "The selected job will be resumed!", + "SelectJobWillBeTriggerMessage": "The selected job will be trigger!", + "SelectJobWillBeStartMessage": "The selected job will be started!", + "SelectJobWillBeStopMessage": "The selected job will be stopped!" } } \ No newline at end of file diff --git a/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/zh-Hans.json b/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/zh-Hans.json index 0e92063df..3e937f599 100644 --- a/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/zh-Hans.json +++ b/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/zh-Hans.json @@ -21,6 +21,7 @@ "DisplayName:Group": "分组", "DisplayName:Name": "名称", "DisplayName:Description": "描述", + "DisplayName:NodeName": "运行节点", "DisplayName:Type": "类型", "Description:Type": "作业实现者的类型,格式: 类型全名, 程序集名称, 示例: System.String, mscorlib", "DisplayName:Status": "状态", @@ -88,6 +89,11 @@ "BackgroundJobs:Copy": "复制作业", "BasicInfo": "基本信息", "Paramters": "参数列表", - "MultipleSelectJobsWillBeDeletedMessage": "选择的多个作业将被删除!" + "MultipleSelectJobsWillBeDeletedMessage": "选择的多个作业将被删除!", + "SelectJobWillBePauseMessage": "选择的作业将被暂停!", + "SelectJobWillBeResumeMessage": "选择的作业将被重启!", + "SelectJobWillBeTriggerMessage": "选择的作业将被触发!", + "SelectJobWillBeStartMessage": "选择的作业将被启动!", + "SelectJobWillBeStopMessage": "选择的作业将被停止!" } } \ No newline at end of file diff --git a/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain/LINGYUN/Abp/TaskManagement/BackgroundJobManager.cs b/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain/LINGYUN/Abp/TaskManagement/BackgroundJobManager.cs index ff0265705..253fd1291 100644 --- a/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain/LINGYUN/Abp/TaskManagement/BackgroundJobManager.cs +++ b/aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain/LINGYUN/Abp/TaskManagement/BackgroundJobManager.cs @@ -2,6 +2,7 @@ using LINGYUN.Abp.BackgroundTasks.EventBus; using System.Collections.Generic; using System.Linq; +using System.Runtime; using System.Threading.Tasks; using Volo.Abp.Domain.Services; using Volo.Abp.EventBus.Distributed; @@ -70,11 +71,33 @@ public class BackgroundJobManager : DomainService public async virtual Task DeleteAsync(BackgroundJobInfo jobInfo) { await BackgroundJobInfoRepository.DeleteAsync(jobInfo); + + UnitOfWorkManager.Current.OnCompleted(async () => + { + await EventBus.PublishAsync( + new JobDeleteEventData + { + IdList = new List { jobInfo.Id }, + TenantId = jobInfo.TenantId, + NodeName = jobInfo.NodeName + }); + }); } public async virtual Task BulkDeleteAsync(IEnumerable jobInfos) { await BackgroundJobInfoRepository.DeleteManyAsync(jobInfos); + + UnitOfWorkManager.Current.OnCompleted(async () => + { + await EventBus.PublishAsync( + new JobDeleteEventData + { + IdList = jobInfos.Select(x => x.Id).ToList(), + TenantId = jobInfos.Select(x => x.TenantId).First(), + NodeName = jobInfos.Select(x => x.NodeName).First() + }); + }); } public async virtual Task QueueAsync(BackgroundJobInfo jobInfo)