using Microsoft.Extensions.DependencyInjection; using Seyounth.Hyosung.Data.Entities; using Seyounth.Hyosung.Data.Models; 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>(); //_repository = provider.GetService>(); _cache = _repository.GetList(); } public async Task GetAvailableBin(Variety variety) { var repo = _repository.CopyNew(); AgvBinEntity? bin = null; if (variety.IsDoubleStack ?? false) { bin = await repo.AsQueryable() .Where(x => x.IsFree && // 二层是空的 !x.IsDeleted && x.IsSecondLayer && // 查找底层放了相同产品且底层不是 Free 的情况 repo.AsQueryable() .Any(y => y.BinCode == x.BinCode && // 底层和二层库位码相同 !y.IsSecondLayer && // 是底层 !y.IsFree && // 底层不是 Free y.BindLot == variety.Lot // 底层和二层绑定的 Lot 相同 ) ) .OrderBy(x => x.Sort) .FirstAsync(); } else { bin = await repo.AsQueryable() .Where(x => x.IsFree && !x.IsDeleted) .OrderBy(x => x.Sort) .FirstAsync(); } if (bin != null) { if (bin.BinCode == "B10") { await repo.AsUpdateable() .Where(x => x.RackType == 2 && !x.IsDeleted) .SetColumns(x => x.IsFree, true) .ExecuteCommandAsync(); } else if (bin.BinCode == "B33") { await repo.AsUpdateable() .Where(x => x.RackType == 1 && !x.IsDeleted) .SetColumns(x => x.IsFree, true) .ExecuteCommandAsync(); } } return bin; } public Task BindAsync(AgvBinEntity entity, int lot) { entity.IsFree = false; _cache.First(e => e.Id == entity.Id).IsFree = false; entity.BindLot = lot; return _repository.CopyNew().UpdateAsync(entity); } }