上传源代码版本

This commit is contained in:
Im-Jenisson
2026-06-01 16:30:29 +08:00
commit b2a9b7d3c2
462 changed files with 104365 additions and 0 deletions

View File

@@ -0,0 +1,127 @@
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
{
/// <summary>
/// 货物数据仓库实现类
/// </summary>
public class CargoDataRepository : ICargoDataRepository
{
private readonly ISqlSugarProvider _provider;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="provider">SqlSugar数据库提供程序</param>
public CargoDataRepository(ISqlSugarProvider provider)
{
_provider = provider;
}
/// <summary>
/// 批量插入货物数据
/// </summary>
public async Task<int> BatchInsertAsync(List<CargoDataEntity> cargoDataList)
{
var db = _provider.GetClient();
return await db.Insertable(cargoDataList).ExecuteCommandAsync();
}
/// <summary>
/// 根据中性面单单号查询货物数据
/// </summary>
public async Task<CargoDataEntity?> GetByWaybillNumberAsync(string neutralWaybillNumber)
{
var db = _provider.GetClient();
return await db.Queryable<CargoDataEntity>()
.Where(x => x.NeutralWaybillNumber == neutralWaybillNumber && x.Status == "Y")
.FirstAsync();
}
/// <summary>
/// 查询货物数据
/// </summary>
public async Task<IEnumerable<CargoDataEntity>> QueryAsync(string? searchKey = null, int? customerId = null, int pageIndex = 1, int pageSize = 100)
{
var db = _provider.GetClient();
var query = db.Queryable<CargoDataEntity>().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();
}
/// <summary>
/// 按中性面单单号批量更新货物数据
/// </summary>
public async Task<int> BatchUpdateByWaybillNumberAsync(List<CargoDataEntity> 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<CargoDataEntity>()
.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;
}
/// <summary>
/// 按中性面单单号批量删除货物数据
/// </summary>
public async Task<int> BatchDeleteByWaybillNumbersAsync(List<string> neutralWaybillNumbers)
{
var db = _provider.GetClient();
return await db.Updateable<CargoDataEntity>()
.SetColumns(x => new CargoDataEntity { Status = "N" })
.Where(x => neutralWaybillNumbers.Contains(x.NeutralWaybillNumber))
.ExecuteCommandAsync();
}
}
}