2025-03-23 13:09:36 +08:00

72 lines
2.3 KiB
C#

using System.Collections.Concurrent;
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 YarnService : IYarnService
{
private readonly IRepository<ScannedYarnEntity> _yarnRepository;
public YarnService(IServiceProvider provider)
{
_yarnRepository = provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<ScannedYarnEntity>>();
// _yarnRepository = provider.GetService<IRepository<ScannedYarnEntity>>();
NoFinished = new ConcurrentDictionary<string, Yarn>();
var yarns = _yarnRepository.GetList(y => !y.IsFinished);
foreach (var yarn in yarns)
{
NoFinished.TryAdd(yarn.ScanCode, Yarn.FromEntity(yarn));
}
}
public ConcurrentDictionary<string, Yarn> NoFinished { get; }
public async Task<Yarn?> AddYarnAsync(Yarn yarn)
{
var id = await _yarnRepository.CopyNew().InsertReturnIdentityAsync(yarn.ToEntity());
yarn.Id = id;
NoFinished.TryAdd(yarn.ScanCode, yarn);
return yarn;
}
public async Task<List<Yarn>> GetYarnsByTrayIdAsync(int trayId)
{
return (await _yarnRepository.CopyNew().GetListAsync(y => y.TrayId == trayId))
.Select(Yarn.FromEntity).ToList();
}
public async Task<Yarn> GetYarnByCodeAsync(string code)
{
try
{
return NoFinished[code];
}
catch
{
return Yarn.FromEntity(await _yarnRepository.CopyNew().GetFirstAsync(d => d.ScanCode == code)) ;
}
}
public async Task FinishYarnAsync(string yarnCode)
{
var yarn = NoFinished[yarnCode];
yarn.IsFinished = true;
await _yarnRepository.CopyNew().UpdateAsync(yarn.ToEntity());
NoFinished.TryRemove(yarnCode, out _);
}
public async Task BindTrayAsync(string yarnCode, int trayId)
{
var yarn = NoFinished[yarnCode];
yarn.TrayId = trayId;
yarn.StackTime = DateTime.Now;
yarn.IsFinished = true;
yarn.IsFinished = true;
await _yarnRepository.CopyNew().UpdateAsync(yarn.ToEntity());
NoFinished.TryRemove(yarnCode, out _);
}
}