using Microsoft.Extensions.DependencyInjection; using Seyounth.Hyosung.Data.Entities; using Seyounth.Hyosung.Data.Repositories; namespace Seyounth.Hyosung.Data.Services; public class AgvBinService : IAgvBinService { private readonly List _cache; private readonly IRepository _repository; public AgvBinService(IServiceProvider provider) { _repository = provider.CreateScope().ServiceProvider.GetRequiredService>(); _cache = _repository.GetList(); } public async Task GetAvailableBin(int height) { if (height < 180) { return _cache .Where(x => x is { CtnrType: 1, IsFree: true } || x is { CtnrType: 2, IsFree: true } && _cache.Any(y => y is { CtnrType: 1, IsFree: false } && y.BinCode == x.BinCode && y is { Height: < 180 }) ) .OrderByDescending(x => x.CtnrType) .ThenBy(x => x.Sort) .First(); } return _cache.Where(a => a is { IsFree: true }).OrderBy(a => a.CtnrType).First(); } public Task BindAsync(AgvBinEntity entity) { entity.IsFree = false; _cache.First(e => e.Id == entity.Id).IsFree = false; return _repository.UpdateAsync(entity); } }