using System.Collections.Generic;
using System.Threading.Tasks;
using MDL.Models;
namespace DAL.Interfaces
{
///
/// 标签历史扫描记录仓储接口
///
public interface ILabelScanRepository
{
///
/// 创建标签扫描记录
///
/// 标签扫描记录实体
/// 创建的记录ID
Task CreateAsync(LabelScanEntity entity);
///
/// 根据中性面单单号获取标签扫描记录列表
///
/// 中性面单单号
/// 标签扫描记录列表
Task> GetByNeutralWaybillNumberAsync(string neutralWaybillNumber);
Task> GetByNeutralWaybillNumbersAsync(List neutralWaybillNumbers);
///
/// 根据参考号获取标签扫描记录列表
///
/// 参考号
/// 标签扫描记录列表
Task> GetByReferenceNumberAsync(string referenceNumber);
///
/// 根据尾程跟踪单号获取标签扫描记录列表
///
/// 尾程跟踪单号
/// 标签扫描记录列表
Task> GetByFinalMileTrackingNumberAsync(string finalMileTrackingNumber);
///
/// 根据客户ID获取标签扫描记录列表
///
/// 客户ID
/// 标签扫描记录列表
Task> GetByCustomerIdAsync(int customerId);
///
/// 根据客户ID和中性面单单号获取标签扫描记录列表
///
/// 客户ID
/// 中性面单单号
/// 标签扫描记录列表
Task> GetByCustomerIdAndWaybillNumberAsync(int customerId, string neutralWaybillNumber);
///
/// 统计客户的订单扫描次数
///
/// 客户ID
/// 中性面单单号(可选,不提供则统计所有订单)
/// 扫描次数
Task CountScansByCustomerAndWaybillAsync(int customerId, string neutralWaybillNumber = null);
///
/// 获取客户的扫描记录分组统计
///
/// 客户ID
/// 按订单分组的扫描统计信息
Task> GetScanStatsByCustomerAsync(int customerId);
///
/// 更新标签扫描记录
///
/// 标签扫描记录实体
/// 是否更新成功
Task UpdateAsync(LabelScanEntity entity);
///
/// 获取所有标签扫描记录
///
/// 标签扫描记录实体列表
Task> GetAllAsync();
///
/// 分页获取标签扫描记录
///
/// 页码
/// 每页大小
/// 排序字段
/// 排序顺序
/// 客户ID
/// 参考号
/// 中性面单单号
/// 尾程跟踪单号
/// 扫描结果
/// 标签扫描记录DTO列表和总记录数
Task<(List, int)> GetByPageAsync(int page, int pageSize, string sortBy, string sortOrder, int? customerId, string referenceNumber, string neutralWaybillNumber, string finalMileTrackingNumber, int? result, string startCreatedAt, string endCreatedAt);
///
/// 根据中性面单单号获取最新的扫描记录
///
/// 中性面单单号
/// 最新的标签扫描记录
Task GetLatestScanByWaybillAsync(string neutralWaybillNumber);
///
/// 根据日期范围获取扫描记录
///
/// 开始日期
/// 结束日期
/// 标签扫描记录列表
Task> GetByDateRangeAsync(System.DateTime startDate, System.DateTime endDate);
}
}