RobotTaskRepository.cs
3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using Microsoft.EntityFrameworkCore;
using Rcs.Domain.Entities;
using Rcs.Domain.Repositories;
using Rcs.Infrastructure.DB.MsSql;
using TaskStatus = Rcs.Domain.Entities.TaskStatus;
namespace Rcs.Infrastructure.DB.Repositories
{
/// <summary>
/// 主任务仓储实现
/// @author zzy
/// </summary>
public class RobotTaskRepository : Repository<RobotTask>, IRobotTaskRepository
{
private IRobotTaskRepository _robotTaskRepositoryImplementation;
public RobotTaskRepository(AppDbContext context) : base(context)
{
}
public async Task<RobotTask?> GetByTaskCodeAsync(string taskCode, CancellationToken cancellationToken = default)
{
return await _dbSet.FirstOrDefaultAsync(t => t.TaskCode == taskCode, cancellationToken);
}
public async Task<IEnumerable<RobotTask>> GetByRobotIdAsync(Guid robotId, CancellationToken cancellationToken = default)
{
return await _dbSet.Where(t => t.RobotId == robotId).ToListAsync(cancellationToken);
}
public async Task<IEnumerable<RobotTask>> GetByStatusAsync(TaskStatus status, CancellationToken cancellationToken = default)
{
return await _dbSet.Where(t => t.Status == status).ToListAsync(cancellationToken);
}
public async Task<IEnumerable<RobotTask>> GetnProgressByRobotIdAsync(Guid robotId, CancellationToken cancellationToken = default)
{
return await _dbSet
.Where(t => t.RobotId == robotId
&& t.Status != TaskStatus.Pending
&& t.Status != TaskStatus.Assigned
&& t.Status != TaskStatus.Completed
&& t.Status != TaskStatus.Cancelled)
.ToListAsync(cancellationToken);
}
public async Task<IEnumerable<RobotTask>> GetPendingTasksAsync(CancellationToken cancellationToken = default)
{
return await _dbSet
.Where(t => t.Status == TaskStatus.Pending)
.OrderBy(t => t.Priority)
.ThenBy(t => t.CreatedAt)
.ToListAsync(cancellationToken);
}
public async Task<RobotTask?> GetByIdWithDetailsAsync(Guid taskId, CancellationToken cancellationToken = default)
{
return await _dbSet
.Include(t => t.Robot)
.Include(t => t.BeginLocation).ThenInclude(l => l.MapNode)
.Include(t => t.BeginLocation).ThenInclude(l => l.StorageArea)
.Include(t => t.EndLocation).ThenInclude(l => l.MapNode)
.Include(t => t.EndLocation).ThenInclude(l => l.StorageArea)
.Include(t => t.TaskTemplate)
.FirstOrDefaultAsync(t => t.TaskId == taskId, cancellationToken);
}
/// <summary>
/// 根据关联单据获取任务
/// @author zzy
/// </summary>
public async Task<RobotTask?> GetByRelationAsync(string relation, CancellationToken cancellationToken = default)
{
return await _dbSet.FirstOrDefaultAsync(t => t.Relation == relation, cancellationToken);
}
}
}