From eada9b6af973fc9a7dbc67d21e6779f959196211 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Tue, 5 Mar 2024 20:09:55 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E4=BB=BB=E5=8A=A1=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E9=87=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeviceTaskAssignmentsController.cs | 10 ++++++++ .../Request/DeviceTaskResetRequest.cs | 17 ++++++++++++++ .../Services/IDeviceTaskAssignmentService.cs | 2 ++ .../Implements/DeviceTaskAssignmentService.cs | 23 +++++++++++++++++++ 4 files changed, 52 insertions(+) create mode 100644 Src/Dlhis.ScheduledTask/TaskAssignment/Request/DeviceTaskResetRequest.cs 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(); + } }