feat 任务状态重置

This commit is contained in:
2024-03-05 20:09:55 +08:00
parent 9e2440fe77
commit eada9b6af9
4 changed files with 52 additions and 0 deletions

View File

@@ -32,4 +32,14 @@ public class DeviceTaskAssignmentsController : ControllerBase
{ {
return await _deviceTaskAssignmentService.GetPageAsync(request); return await _deviceTaskAssignmentService.GetPageAsync(request);
} }
/// <summary>
/// 重置任务
/// </summary>
/// <returns></returns>
[HttpPost("reset")]
public async Task ResetAsync(DeviceTaskResetRequest request)
{
await _deviceTaskAssignmentService.ResetAsync(request);
}
} }

View File

@@ -0,0 +1,17 @@
using System.ComponentModel.DataAnnotations;
namespace Dlhis.ScheduledTask.TaskAssignment.Request;
public class DeviceTaskResetRequest
{
/// <summary>
/// 任务ids
/// </summary>
[MinLength(1, ErrorMessage = "请选择任务进行重置")]
public List<long> Ids { get; set; }
/// <summary>
/// 是否强制重置
/// </summary>
public bool Force { get; set; }
}

View File

@@ -8,4 +8,6 @@ public interface IDeviceTaskAssignmentService : IScopeDependency
{ {
Task<Pagination<DeviceTaskAssignmentResponse>> GetPageAsync(DeviceTaskAssignmentRequest request); Task<Pagination<DeviceTaskAssignmentResponse>> GetPageAsync(DeviceTaskAssignmentRequest request);
Task ResetAsync(DeviceTaskResetRequest request);
} }

View File

@@ -1,5 +1,6 @@
using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums;
using Dlhis.ScheduledTask.TaskAssignment.Request; using Dlhis.ScheduledTask.TaskAssignment.Request;
using Dlhis.ScheduledTask.TaskAssignment.Response; using Dlhis.ScheduledTask.TaskAssignment.Response;
using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.AspNetCore.Utils.Extensions;
@@ -45,6 +46,28 @@ public class DeviceTaskAssignmentService : IDeviceTaskAssignmentService
return page; return page;
} }
public async Task ResetAsync(DeviceTaskResetRequest request)
{
var tasks = await _dbContext.Queryable<DeviceTaskEntity>()
.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<DeviceTaskEntity>()
.SetColumns(x => x.Status == DeviceTaskStatusEnumType.Wait)
.Where(x => request.Ids.Contains(x.Id))
.Where(x => x.Status == DeviceTaskStatusEnumType.Process || x.Status == DeviceTaskStatusEnumType.Error)
.ExecuteCommandAsync();
}
} }