81 lines
2.7 KiB
C#
81 lines
2.7 KiB
C#
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<AgvBinEntity> _cache;
|
|
|
|
private readonly IRepository<AgvBinEntity> _repository;
|
|
|
|
public AgvBinService(IServiceProvider provider)
|
|
{
|
|
_repository = provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<AgvBinEntity>>();
|
|
//_repository = provider.GetService<IRepository<AgvBinEntity>>();
|
|
_cache = _repository.GetList();
|
|
}
|
|
|
|
public async Task<AgvBinEntity> 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);
|
|
}
|
|
} |