using System.Collections.Generic;
using System.Threading.Tasks;
using MDL.Models;
using DAL.Interfaces;
using DB.Database;
using SqlSugar;
namespace DAL.Repositories
{
///
/// 订单日志仓储实现类
///
public class OrderLogRepository : IOrderLogRepository
{
private readonly ISqlSugarProvider _provider;
///
/// 构造函数
///
/// SqlSugar数据库提供程序
public OrderLogRepository(ISqlSugarProvider provider)
{
_provider = provider;
}
///
/// 获取数据库客户端
///
private ISqlSugarClient Db => _provider.GetClient();
///
/// 插入订单日志
///
/// 订单日志实体
/// 插入是否成功
public async Task InsertOrderLogAsync(OrderLogEntity log)
{
// 确保表存在
if (!Db.DbMaintenance.IsAnyTable("order_logs"))
{
Db.CodeFirst.InitTables(typeof(OrderLogEntity));
}
var result = await Db.Insertable(log).ExecuteCommandAsync();
return result > 0;
}
///
/// 根据中性面单单号获取订单日志列表
///
/// 中性面单单号
/// 订单日志实体列表
public async Task> GetOrderLogsByWaybillNumberAsync(string neutralWaybillNumber)
{
return await Db.Queryable()
.Where(x => x.NeutralWaybillNumber == neutralWaybillNumber)
.OrderBy(x => x.CreatedAt)
.ToListAsync();
}
///
/// 根据尾程跟踪单号获取订单日志列表
///
/// 尾程跟踪单号
/// 订单日志实体列表
public async Task> GetOrderLogsByTrackingNumberAsync(string finalMileTrackingNumber)
{
return await Db.Queryable()
.Where(x => x.FinalMileTrackingNumber == finalMileTrackingNumber)
.OrderBy(x => x.CreatedAt)
.ToListAsync();
}
///
/// 获取所有订单日志列表(分页)
///
/// 页码
/// 每页大小
/// 订单日志实体列表
public async Task> GetAllOrderLogsAsync(int pageIndex, int pageSize)
{
return await Db.Queryable()
.OrderBy(x => x.CreatedAt, OrderByType.Desc)
.ToPageListAsync(pageIndex, pageSize);
}
///
/// 根据操作类型和操作结果获取订单日志列表
///
/// 操作类型
/// 操作结果
/// 页码
/// 每页大小
/// 订单日志实体列表
public async Task> GetOrderLogsByOperationAsync(string operationType, string operationResult, int pageIndex, int pageSize)
{
var query = Db.Queryable();
if (!string.IsNullOrEmpty(operationType))
{
query = query.Where(x => x.OperationType == operationType);
}
if (!string.IsNullOrEmpty(operationResult))
{
query = query.Where(x => x.OperationResult == operationResult);
}
return await query
.OrderBy(x => x.CreatedAt, OrderByType.Desc)
.ToPageListAsync(pageIndex, pageSize);
}
}
}