71 lines
2.5 KiB
C#
71 lines
2.5 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.Logging;
|
|
using PARR.DAL.Context;
|
|
using PARR.DAL.Models.Unit;
|
|
using PARR.DAL.Services.Interfaces.Unit;
|
|
|
|
namespace PARR.DAL.Services.Implementations.Unit
|
|
{
|
|
internal class UnitInValueService : IUnitInValueService
|
|
{
|
|
private readonly ILogger<UnitInValueService> logger;
|
|
private readonly DataContext dataContext;
|
|
|
|
public UnitInValueService(
|
|
ILogger<UnitInValueService> logger,
|
|
DataContext dataContext
|
|
)
|
|
{
|
|
this.logger = logger;
|
|
this.dataContext = dataContext;
|
|
}
|
|
|
|
public async Task<List<UnitInValue>> GetByUnitIdAsync(Guid unitId)
|
|
{
|
|
return await dataContext.UnitInValues.AsNoTracking()
|
|
.Include(t => t.Value)
|
|
.Where(uv => uv.UnitId == unitId)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public async Task<List<UnitInValue>> GetByUnitIdsAsync(IEnumerable<Guid> unitIds)
|
|
{
|
|
return await dataContext.UnitInValues.AsNoTracking()
|
|
.Include(t => t.Value)
|
|
.Where(uv => unitIds.Contains(uv.UnitId))
|
|
.ToListAsync();
|
|
}
|
|
|
|
|
|
public async Task<Dictionary<string, string>> GetFieldValuesAsync(Guid unitId, IReadOnlyCollection<string> aihitNames)
|
|
{
|
|
if (aihitNames == null || aihitNames.Count == 0)
|
|
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
|
|
|
var result = await dataContext.UnitInValues
|
|
.AsNoTracking()
|
|
.AsSplitQuery()
|
|
.Where(uiv => uiv.UnitId == unitId
|
|
&& uiv.Field != null
|
|
&& uiv.Value != null
|
|
&& aihitNames.Contains(uiv.Field.AihitName.ToUpper()))
|
|
.ToDictionaryAsync(
|
|
uiv => uiv.Field!.AihitName.ToUpper(),
|
|
uiv => uiv.Value!.Value ?? "",
|
|
StringComparer.OrdinalIgnoreCase);
|
|
|
|
// Журналируем если не нашли поля
|
|
var missing = aihitNames
|
|
.Where(name => !result.ContainsKey(name.ToUpper()))
|
|
.ToList();
|
|
if (missing.Any())
|
|
{
|
|
logger.LogDebug("UnitInValueService: поля не найдены для unitId={UnitId}: {Fields}",
|
|
unitId, string.Join(", ", missing));
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|