using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using DAL.Interfaces; using MDL.Models; using DB.Database; using SqlSugar; namespace DAL.Repositories { /// /// 货物数据仓库实现类 /// public class CargoDataRepository : ICargoDataRepository { private readonly ISqlSugarProvider _provider; /// /// 构造函数 /// /// SqlSugar数据库提供程序 public CargoDataRepository(ISqlSugarProvider provider) { _provider = provider; } /// /// 批量插入货物数据 /// public async Task BatchInsertAsync(List cargoDataList) { var db = _provider.GetClient(); return await db.Insertable(cargoDataList).ExecuteCommandAsync(); } /// /// 根据中性面单单号查询货物数据 /// public async Task GetByWaybillNumberAsync(string neutralWaybillNumber) { var db = _provider.GetClient(); return await db.Queryable() .Where(x => x.NeutralWaybillNumber == neutralWaybillNumber && x.Status == "Y") .FirstAsync(); } /// /// 查询货物数据 /// public async Task> QueryAsync(string? searchKey = null, int? customerId = null, int pageIndex = 1, int pageSize = 100) { var db = _provider.GetClient(); var query = db.Queryable().Where(x => x.Status == "Y"); // 搜索关键字过滤 if (!string.IsNullOrEmpty(searchKey)) { query = query.Where(x => x.NeutralWaybillNumber.Contains(searchKey) || (x.BillOfLadingNumber != null && x.BillOfLadingNumber.Contains(searchKey)) || (x.MasterPackageNumber != null && x.MasterPackageNumber.Contains(searchKey))); } // 客户ID过滤 if (customerId.HasValue) { query = query.Where(x => x.CustomerId == customerId.Value); } // 分页查询 return await query .OrderByDescending(x => x.ImportedAt) .Skip((pageIndex - 1) * pageSize) .Take(pageSize) .ToListAsync(); } /// /// 按中性面单单号批量更新货物数据 /// public async Task BatchUpdateByWaybillNumberAsync(List cargoDataList) { var db = _provider.GetClient(); int totalUpdated = 0; // 分组更新(每批处理100条) foreach (var batch in cargoDataList.GroupBy(x => x.NeutralWaybillNumber)) { var data = batch.FirstOrDefault(); if (data == null) { continue; } // 更新除中性面单单号外的其他字段 int updated = await db.Updateable() .SetColumns(x => new CargoDataEntity { BillOfLadingNumber = data.BillOfLadingNumber, MasterPackageNumber = data.MasterPackageNumber, CustomerId = data.CustomerId, ImportedAt = data.ImportedAt, ImportedBy = data.ImportedBy, Status = data.Status }) .Where(x => x.NeutralWaybillNumber == data.NeutralWaybillNumber) .ExecuteCommandAsync(); totalUpdated += updated; } return totalUpdated; } /// /// 按中性面单单号批量删除货物数据 /// public async Task BatchDeleteByWaybillNumbersAsync(List neutralWaybillNumbers) { var db = _provider.GetClient(); return await db.Updateable() .SetColumns(x => new CargoDataEntity { Status = "N" }) .Where(x => neutralWaybillNumbers.Contains(x.NeutralWaybillNumber)) .ExecuteCommandAsync(); } } }