diff --git a/AsbCloudInfrastructure/Services/CrudServiceBase.cs b/AsbCloudInfrastructure/Services/CrudServiceBase.cs index 12805c00..7bb64c88 100644 --- a/AsbCloudInfrastructure/Services/CrudServiceBase.cs +++ b/AsbCloudInfrastructure/Services/CrudServiceBase.cs @@ -137,7 +137,7 @@ namespace AsbCloudInfrastructure.Services public virtual TModel Convert(TDto src) => src.Adapt(); - private IQueryable GetQueryWithIncludes() + protected IQueryable GetQueryWithIncludes() { IQueryable query = dbSet; foreach (var include in Includes) diff --git a/AsbCloudInfrastructure/Services/DrillerService.cs b/AsbCloudInfrastructure/Services/DrillerService.cs index 28788abb..3b5f0180 100644 --- a/AsbCloudInfrastructure/Services/DrillerService.cs +++ b/AsbCloudInfrastructure/Services/DrillerService.cs @@ -14,33 +14,5 @@ namespace AsbCloudInfrastructure.Services public DrillerService(IAsbCloudDbContext context) : base(context) { } - - public async Task DeleteAsync(int id, CancellationToken dto) - { - return await base.DeleteAsync(id, dto); - } - - public async Task> GetAllAsync(CancellationToken token) - { - return await base.GetAllAsync(token); - } - - public async Task GetAsync(int id, CancellationToken token) - { - return await base.GetAsync(id,token) - .ConfigureAwait(false); - } - - public async Task InsertAsync(DrillerDto dto, CancellationToken token) - { - return await base.InsertAsync(dto, token); - } - - public async Task UpdateAsync(int id, DrillerDto dto, CancellationToken token) - { - return await base.UpdateAsync(id,dto, token); - } - - } } diff --git a/AsbCloudInfrastructure/Services/ScheduleService.cs b/AsbCloudInfrastructure/Services/ScheduleService.cs index 41be8f9e..15e7550b 100644 --- a/AsbCloudInfrastructure/Services/ScheduleService.cs +++ b/AsbCloudInfrastructure/Services/ScheduleService.cs @@ -1,68 +1,68 @@ using AsbCloudApp.Data; using AsbCloudApp.Services; using AsbCloudDb.Model; -using AsbCloudInfrastructure.Services.Cache; using Mapster; using Microsoft.EntityFrameworkCore; using System; -using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace AsbCloudInfrastructure.Services { - public class ScheduleService : CrudServiceBase, IScheduleService +#nullable enable + public class ScheduleService : CrudServiceBase, IScheduleService { - public ScheduleService(IAsbCloudDbContext context) : base(context) + private readonly IWellService wellService; + + public ScheduleService(IAsbCloudDbContext context, IWellService wellService) : base(context) { - Includes.Add(nameof(ScheduleItem.Driller)); + Includes.Add(nameof(Schedule.Driller)); + this.wellService = wellService; } - public async Task DeleteAsync(int id, CancellationToken dto) - { - return await base.DeleteAsync(id,dto); - } - - public async Task> GetAllAsync(CancellationToken token) + public async Task GetDrillerAsync(int idWell, DateTime workTime, CancellationToken token = default) { - return await base.GetAllAsync(token); - } + var hoursOffset = wellService.GetTimezone(idWell).Hours; + var date = workTime.ToUtcDateTimeOffset(hoursOffset); - public async Task GetAsync(int id, CancellationToken token) - { - var res= await base.GetAsync(id,token) - .ConfigureAwait(false); - return res; - } + var entities = await GetQueryWithIncludes() + .Where(s => s.IdWell==idWell + && s.DrillStart <= date + && s.DrillEnd >= date) + .ToListAsync(token); - public async Task GetSchedule(int idWell, DateTimeOffset workTime, CancellationToken token = default) - { - IQueryable query = context.Set(); - foreach (var include in Includes) - query = query.Include(include); - - var entires = query.Where(e => e.IdWell==idWell - && e.DrillStart <= workTime - && e.DrillEnd >= workTime) - .FirstOrDefault(); - - if (entires is null) + if (!entities.Any()) return null; - return entires.Driller.Adapt(); + var remoteDate = date.ToRemoteDateTime(hoursOffset); + var time = new TimeOnly(remoteDate.Hour, remoteDate.Minute, remoteDate.Second); + + var entity = entities.FirstOrDefault(s => + (s.ShiftStart > s.ShiftEnd) ^ + (time >= s.ShiftStart && time < s.ShiftEnd) + ); + + return entity?.Driller.Adapt(); } - public async Task InsertAsync(ScheduleDto dto, CancellationToken token) - { - return await base.InsertAsync(dto,token); - } - - public async Task UpdateAsync(int id, ScheduleDto dto, CancellationToken token) + public override Schedule Convert(ScheduleDto dto) { - return await base.UpdateAsync(id,dto,token); + var hoursOffset = wellService.GetTimezone(dto.IdWell).Hours; + var entity = base.Convert(dto); + entity.DrillStart = dto.DrillStart.ToUtcDateTimeOffset(hoursOffset); + entity.DrillEnd = dto.DrillEnd.ToUtcDateTimeOffset(hoursOffset); + return entity; } - + public override ScheduleDto Convert(Schedule entity) + { + var hoursOffset = wellService.GetTimezone(entity.IdWell).Hours; + var dto = base.Convert(entity); + dto.DrillStart = entity.DrillStart.ToRemoteDateTime(hoursOffset); + dto.DrillEnd = entity.DrillEnd.ToRemoteDateTime(hoursOffset); + return dto; + } } +#nullable disable }