diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs index 6b72836c..52822708 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs @@ -32,4 +32,14 @@ public class DeviceTaskAssignmentsController : ControllerBase { return await _deviceTaskAssignmentService.GetPageAsync(request); } + + /// + /// 重置任务 + /// + /// + [HttpPost("reset")] + public async Task ResetAsync(DeviceTaskResetRequest request) + { + await _deviceTaskAssignmentService.ResetAsync(request); + } } diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Request/DeviceTaskResetRequest.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Request/DeviceTaskResetRequest.cs new file mode 100644 index 00000000..516be624 --- /dev/null +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Request/DeviceTaskResetRequest.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; + +namespace Dlhis.ScheduledTask.TaskAssignment.Request; + +public class DeviceTaskResetRequest +{ + /// + /// 任务ids + /// + [MinLength(1, ErrorMessage = "请选择任务进行重置")] + public List Ids { get; set; } + + /// + /// 是否强制重置 + /// + public bool Force { get; set; } +} diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/IDeviceTaskAssignmentService.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/IDeviceTaskAssignmentService.cs index e5bc005c..67c172dd 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/IDeviceTaskAssignmentService.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/IDeviceTaskAssignmentService.cs @@ -8,4 +8,6 @@ public interface IDeviceTaskAssignmentService : IScopeDependency { Task> GetPageAsync(DeviceTaskAssignmentRequest request); + Task ResetAsync(DeviceTaskResetRequest request); + } diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs index ea755590..f2cff78a 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs @@ -1,5 +1,6 @@ using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; +using Dlhis.Entity.Device.Enums; using Dlhis.ScheduledTask.TaskAssignment.Request; using Dlhis.ScheduledTask.TaskAssignment.Response; using Kurisu.AspNetCore.Utils.Extensions; @@ -45,6 +46,28 @@ public class DeviceTaskAssignmentService : IDeviceTaskAssignmentService return page; } + + public async Task ResetAsync(DeviceTaskResetRequest request) + { + var tasks = await _dbContext.Queryable() + .Where(x => request.Ids.Contains(x.Id)) + .Where(x => x.Status == DeviceTaskStatusEnumType.Process || x.Status == DeviceTaskStatusEnumType.Error) + .ToListAsync(); + + //判断process任务时间 + if (!request.Force) + { + var now = DateTime.Now; + tasks.Any(x => x.ModifiedTime.AddMinutes(10) < now && x.Status == DeviceTaskStatusEnumType.Process).ThrowIfTrue("请等待任务处理完成"); + } + + //更新任务状态 + await _dbContext.Updateable() + .SetColumns(x => x.Status == DeviceTaskStatusEnumType.Wait) + .Where(x => request.Ids.Contains(x.Id)) + .Where(x => x.Status == DeviceTaskStatusEnumType.Process || x.Status == DeviceTaskStatusEnumType.Error) + .ExecuteCommandAsync(); + } }