You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
4.6 KiB
139 lines
4.6 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Linq;
|
|
using Microsoft.Extensions.Logging;
|
|
using CellularManagement.Domain.Entities;
|
|
using CellularManagement.Domain.Repositories;
|
|
using CellularManagement.Infrastructure.Repositories.Base;
|
|
using CellularManagement.Domain.Entities.Device;
|
|
using CellularManagement.Domain.Repositories.Base;
|
|
using CellularManagement.Domain.Repositories.Device;
|
|
|
|
namespace CellularManagement.Infrastructure.Repositories.Device;
|
|
|
|
/// <summary>
|
|
/// 场景仓储实现类
|
|
/// </summary>
|
|
public class ScenarioRepository : BaseRepository<Scenario>, IScenarioRepository
|
|
{
|
|
private readonly ILogger<ScenarioRepository> _logger;
|
|
|
|
/// <summary>
|
|
/// 初始化仓储
|
|
/// </summary>
|
|
public ScenarioRepository(
|
|
ICommandRepository<Scenario> commandRepository,
|
|
IQueryRepository<Scenario> queryRepository,
|
|
ILogger<ScenarioRepository> logger)
|
|
: base(commandRepository, queryRepository, logger)
|
|
{
|
|
_logger = logger;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加场景
|
|
/// </summary>
|
|
public async Task<Scenario> AddScenarioAsync(Scenario scenario, CancellationToken cancellationToken = default)
|
|
{
|
|
var result = await CommandRepository.AddAsync(scenario, cancellationToken);
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新场景
|
|
/// </summary>
|
|
public void UpdateScenario(Scenario scenario)
|
|
{
|
|
CommandRepository.Update(scenario);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除场景
|
|
/// </summary>
|
|
public async Task DeleteScenarioAsync(string id, CancellationToken cancellationToken = default)
|
|
{
|
|
await CommandRepository.DeleteByIdAsync(id, cancellationToken);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取所有场景
|
|
/// </summary>
|
|
public async Task<IList<Scenario>> GetAllScenariosAsync(CancellationToken cancellationToken = default)
|
|
{
|
|
var scenarios = await QueryRepository.GetAllAsync(cancellationToken: cancellationToken);
|
|
return scenarios.ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据ID获取场景
|
|
/// </summary>
|
|
public async Task<Scenario?> GetScenarioByIdAsync(string id, CancellationToken cancellationToken = default)
|
|
{
|
|
return await QueryRepository.GetByIdAsync(id, cancellationToken: cancellationToken);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据编码获取场景
|
|
/// </summary>
|
|
public async Task<Scenario?> GetScenarioByCodeAsync(string code, CancellationToken cancellationToken = default)
|
|
{
|
|
return await QueryRepository.FirstOrDefaultAsync(s => s.Code == code, cancellationToken: cancellationToken);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 搜索场景
|
|
/// </summary>
|
|
public async Task<IList<Scenario>> SearchScenariosAsync(
|
|
string? keyword,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
var query = await QueryRepository.FindAsync(s => true, cancellationToken: cancellationToken);
|
|
|
|
if (!string.IsNullOrWhiteSpace(keyword))
|
|
{
|
|
query = query.Where(s =>
|
|
s.Name.Contains(keyword) ||
|
|
s.Code.Contains(keyword) ||
|
|
(s.Description != null && s.Description.Contains(keyword)));
|
|
}
|
|
|
|
var scenarios = query;
|
|
return scenarios.ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查场景是否存在
|
|
/// </summary>
|
|
public async Task<bool> ExistsAsync(string id, CancellationToken cancellationToken = default)
|
|
{
|
|
return await QueryRepository.AnyAsync(s => s.Id == id, cancellationToken: cancellationToken);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查编码是否存在
|
|
/// </summary>
|
|
public async Task<bool> CodeExistsAsync(string code, CancellationToken cancellationToken = default)
|
|
{
|
|
return await QueryRepository.AnyAsync(s => s.Code == code, cancellationToken: cancellationToken);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取启用的场景
|
|
/// </summary>
|
|
public async Task<IList<Scenario>> GetEnabledScenariosAsync(CancellationToken cancellationToken = default)
|
|
{
|
|
var scenarios = await QueryRepository.FindAsync(s => !s.IsDisabled, cancellationToken: cancellationToken);
|
|
return scenarios.ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据网络配置ID获取场景
|
|
/// </summary>
|
|
public async Task<IList<Scenario>> GetScenariosByNetworkConfigIdAsync(string networkConfigId, CancellationToken cancellationToken = default)
|
|
{
|
|
var scenarios = await QueryRepository.FindAsync(s => s.NetworkConfigId == networkConfigId, cancellationToken: cancellationToken);
|
|
return scenarios.ToList();
|
|
}
|
|
}
|