using Abp.Collections.Extensions; using SnapshotWinFormsApp.Application.Dtos; using SnapshotWinFormsApp.Entities.NewHotline; using SnapshotWinFormsApp.Repository.Interfaces; using SqlSugar; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SnapshotWinFormsApp.Repository; public class ConcurrentQueueRepository where TEntity : Entity, new() { private ConcurrentQueue _queue = new ConcurrentQueue(); public void Insert(TEntity entity, ISqlSugarClient sugarClient, bool isEnd) { _queue.Enqueue(entity); if (_queue.Count != 1000 && isEnd == false) return; sugarClient.Fastest().BulkCopy(_queue.ToList()); _queue.Clear(); } } public class BaseRepository : IBaseRepository where T : Entity, new() { private readonly SqlSugarClient _db; public readonly ConcurrentQueueRepository _queue; public SqlSugarClient db => this._db; public BaseRepository(CreateInstanceInDto inDto) { var context = inDto.DbSqlServer; _db = context.DbItems.GetValueOrDefault(inDto.Key + "PGSQLDB"); _queue = new ConcurrentQueueRepository(); } public async Task> GetAllAsync(CancellationToken token) { return _db.Queryable().ToList(); } public T GetById(int id) { return _db.Queryable().InSingle(id); } public async Task InsertAsync(T entity, CancellationToken token) { if (entity.Id.IsNullOrEmpty()) entity.InitId(); await _db.Insertable(entity).ExecuteCommandAsync(token); return entity.Id; } public ISugarQueryable Queryable() { return _db.Queryable(); } public void Update(T entity) { _db.Updateable(entity).ExecuteCommand(); } public IUpdateable Updateable() => _db.Updateable(); public async Task ExecuteSqlAsync(string sql) { return await _db.Ado.ExecuteCommandAsync(sql, new List()); } public DataTable GetDataTable(string sql) => _db.Ado.GetDataTable(sql); public string InsertBulk(T entity, bool isEnd) { if (entity.Id.IsNullOrEmpty()) entity.InitId(); _queue.Insert(entity,_db, isEnd); return entity.Id; } }