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();
+ }
}