feat 任务预警

This commit is contained in:
2025-06-06 16:08:06 +08:00
parent fea1688c06
commit e716baa5cc
4 changed files with 214 additions and 0 deletions

View File

@@ -7,6 +7,9 @@ namespace Dlhis.ScheduledTask.TaskAssignment.Services;
public interface IDeviceTaskAssignmentService : IScopeDependency
{
Task<Pagination<DeviceTaskAssignmentResponse>> GetPageAsync(DeviceTaskAssignmentRequest request);
Task<Pagination<DeviceTaskAssignmentResponse>> GetPageWarningAsync(DeviceTaskAssignmentRequest request);
Task ResetAsync(DeviceTaskResetRequest request);

View File

@@ -103,6 +103,68 @@ public class DeviceTaskAssignmentService : IDeviceTaskAssignmentService
return page;
}
public async Task<Pagination<DeviceTaskAssignmentResponse>> GetPageWarningAsync(DeviceTaskAssignmentRequest request)
{
var page = await _dbContext.Queryable<DeviceTaskEntity>()
.LeftJoin<DeviceEntity>((deviceTask, device) => deviceTask.DeviceUniqueNo == device.UniqueNo)
.LeftJoin<GainfoEntity>((deviceTask, device, ga) => deviceTask.UserNo == ga.No)
.LeftJoin<GainfoLeaveEntity>((deviceTask, device, ga, gaLeave) => deviceTask.UserNo == gaLeave.No)
.LeftJoin<DeviceRegistryEntity>((deviceTask, device, ga, gaLeave, deviceRegistry) => deviceRegistry.DeviceUniqueNo == deviceTask.DeviceUniqueNo)
.Where(deviceTask => deviceTask.TenantId == request.Factory)
.WhereIF(!request.Search.IsEmpty(), (deviceTask, device, ga) =>
ga.Name == request.Search
|| ga.Code == request.Search
|| deviceTask.DeviceUniqueNo == request.Search
)
.Where(deviceTask => deviceTask.Version >= 10)
.OrderBy(deviceTask => deviceTask.ModifiedTime, OrderByType.Desc)
.Select((deviceTask, device, ga, gaLeave, deviceRegistry) => new DeviceTaskAssignmentResponse
{
Id = deviceTask.Id,
DeviceUniqueNo = deviceTask.DeviceUniqueNo,
ResultMessage = deviceTask.ResultMessage,
RetryCount = deviceTask.Version,
Status = deviceTask.Status,
UserNo = deviceTask.UserNo,
UserName = SqlFunc.IsNull(ga.Name, gaLeave.Name),
UserCode = SqlFunc.IsNull(ga.Code, gaLeave.Code),
Type = deviceTask.Type,
CreateTime = deviceTask.CreateTime,
LastUpdateTime = deviceTask.ModifiedTime,
TenantId = deviceTask.TenantId,
LastHeartbeatTime = deviceRegistry.LastHeartbeatTime,
HeartbeatInterval = device.HeartbeatInterval,
DeployPlace = device.DeployPlace,
CreateBy = deviceTask.CreatedBy,
Source = deviceTask.Source
})
.ToPageListAsync(request);
try
{
var tenants = await _tenantApi.GetTenantsInternalAsync();
page.Data.ForEach(item => { item.TenantName = tenants.FirstOrDefault(x => x.Code == item.TenantId)?.Name; });
}
catch (Exception)
{
//ignore
}
try
{
var userIds = page.Data.Select(x => x.CreateBy).Distinct().ToList();
var userInfos = await _userApi.GetUserByIdsAsync(new IdsRequest { Ids = userIds });
page.Data.ForEach(item => item.Creator = userInfos.FirstOrDefault(x => x.Id == item.CreateBy)?.OperatorName);
}
catch (Exception e)
{
_logger.LogError("获取人员数据失败:{error}", e.Message);
}
return page;
}
public async Task ResetAsync(DeviceTaskResetRequest request)
{
var tasks = await _dbContext.Queryable<DeviceTaskEntity>()