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