using System.Collections.Generic;
using System.Threading.Tasks;
using MDL.Models;
using MDL.DTOs;
namespace DAL.Interfaces
{
///
/// 标签替换请求的数据访问接口
///
public interface ILabelReplaceRepository
{
///
/// 创建标签替换请求记录
///
/// 标签替换请求实体
/// 创建的记录ID
Task CreateAsync(LabelReplaceEntity entity);
///
/// 根据ID获取标签替换请求记录
///
/// 记录ID
/// 标签替换请求实体
Task GetByIdAsync(int id);
///
/// 根据中性面单单号获取标签替换请求记录
///
/// 中性面单单号
/// 标签替换请求实体
Task GetByWaybillNumberAsync(string waybillNumber);
///
/// 根据跟踪单号获取标签替换请求记录
///
/// 跟踪单号
/// 标签替换请求实体列表
Task> GetByTrackingNumberAsync(string trackingNumber);
///
/// 更新标签替换请求记录
///
/// 标签替换请求实体
/// 更新是否成功
Task UpdateAsync(LabelReplaceEntity entity);
///
/// 删除标签替换请求记录
///
/// 记录ID
/// 删除是否成功
Task DeleteAsync(int id);
///
/// 获取所有标签替换请求记录
///
/// 标签替换请求实体列表
Task> GetAllAsync();
///
/// 分页获取标签替换请求记录
///
/// 页码
/// 每页大小
/// 排序字段
/// 排序顺序
/// 提单号
/// 大包号
/// 参考号
/// 中性面单单号
/// 尾程跟踪单号
/// 换单状态
/// 客户ID
/// 标签替换请求实体列表和总记录数
Task<(List, int)> GetByPageAsync(int page, int pageSize, string sortBy, string sortOrder, string billOfLadingNumber, string masterPackageNumber, string referenceNumber, string neutralWaybillNumber, string finalMileTrackingNumber, string replaceStatus, int? customerId, string startCreatedAt, string endCreatedAt, string startReplacedAt, string endReplacedAt);
///
/// 批量查询换单状态
///
/// 客户ID
/// 中性面单单号列表
/// 尾程跟踪单号列表
/// 标签替换请求实体列表和最新扫描时间映射
Task<(List, Dictionary)> GetLabelReplaceStatusAsync(int customerId, List waybillNumbers, List trackingNumbers);
///
/// 根据交接单号列表批量获取标签替换请求记录
///
/// 交接单号列表
/// 客户ID
/// 标签替换请求实体列表
Task> GetByHandoverNumbersAsync(List handoverNumbers, int? customerId);
///
/// 将base64编码转换为PDF文件并保存
///
/// base64编码的PDF内容
/// 文件名
/// 保存的文件路径
Task ConvertBase64ToPdfAsync(string base64Content, string fileName);
///
/// 更新Label字段但保持LabelRetrievedAt不变
///
/// 记录ID
/// 新的Label值
/// 更新是否成功
Task UpdateLabelWithoutChangingRetrievedAtAsync(int id, string newLabel);
///
/// 获取每日标签统计数据
///
/// 开始日期
/// 结束日期
/// 客户ID
/// 每日标签统计数据列表
Task> GetDailyLabelStatsAsync(string startDate, string endDate, int? customerId);
///
/// 获取每日标签统计数据(中文版本,使用自定义SQL)
///
/// 每日标签统计数据列表
Task> GetDailyLabelStatsChineseAsync();
}
}