using Furion.FriendlyException;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Myshipping.Application.Entity;
using Myshipping.Application.Event;
using Myshipping.Application.Service.BookingSlot.Dto;
using Myshipping.Core;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Myshipping.Application
{
public interface IBookingSlotService
{
///
/// 舱位接收保存、取消接口
///
/// 请求详情
/// BC附件
/// BC变更附件
///
Task ApiReceive(string jsonData, IFormFile file = null, IFormFile modifyFile = null);
Task Detail(long id);
///
/// 查询可用的舱位及箱子
///
Task> GetAvailableSlots(BookingSlotBaseDto input, PageWithTotal pageInfo);
///
/// 查询可用的舱位及箱子列表
///
/// 筛选条件1:舱位信息、箱型
/// 筛选条件2:舱位主键列表
/// 筛选条件3:分页
/// 可用的舱位列表(含可用的箱子列表)
Task> GetAvailableSlots(BookingSlotBaseDto slotInput = null,
List slotIdListInput = null,
PageWithTotal pageInfo = null);
///
/// 检查指定订舱记录,是否可以引入舱位列表
///
/// 待引入的舱位列表
/// 待关联的订舱记录
/// (指定订舱记录是否已经引入过舱位数据,现有舱位及箱子是否满足需求,提示信息)
Task<(bool isExists, bool isEnough, string message)> CheckImportSlots(List slots, long bookingOrderId);
///
/// 为指定订舱记录引入舱位信息
///
/// 待引入的舱位列表
/// 待关联的订舱记录
/// 是否进行剩余量检查
/// (是否成功,提示消息)
Task<(bool isSuccess, string message)> ImportSlots(List slots, long bookingOrderId, bool isCheck);
Task PageStock(BookingSlotStockPageInput input);
Task RefreshStock(BookingSlotStockUpdateModel input);
Task Save(BookingSlotBaseSaveInput input);
///
/// 获取附件
///
/// 舱位主键
/// 返回附件列表
Task> GetFile(long id);
///
/// 分页查询订舱舱位
///
///
///
Task Page(BookingSlotBasePageInput input);
///
/// 舱位接收保存、取消接口
///
///
///
///
///
Task InnerApiReceive(BookingSlotBaseApiDto dto, DynameFileInfo file = null, DynameFileInfo modifyFile = null);
///
/// 获取舱位变更比对结果
///
/// 舱位主键
/// 批次号
/// 返回舱位变更比对结果
Task> GetSlotCompareResult(long id, string batchNo);
///
/// 导入舱位
///
/// 导入舱位文件
/// 返回回执
Task ImportSlotFromFile(IFormFile file);
///
/// 生成订舱订单
///
/// 生成订舱订单请求
/// 返回回执
Task CreateBookingOrder(BookingGenerateDto model);
///
/// 检索舱位对应的订舱订单(BY 舱位主键)
///
///
/// 返回回执
Task SearchBookingSlotWithOrderById(long id);
///
/// 检索舱位对应的订舱订单(BY 订舱编号)
///
/// 订舱编号
/// 租户ID
/// 返回回执
Task SearchBookingSlotWithOrderByNo(string slotBookingNo, long tenantId);
///
/// 校验是否可以生成订舱订单
///
/// 舱位主键
/// 返回回执
Task ValidateCreateBookingOrder(long id);
///
/// 批量发送邮件提醒(发送客户)
///
/// 舱位批量发送邮件请求
/// 返回回执
Task SendEmail(BookingSlotSendEmailDto model);
///
/// 请求BC比对
///
/// BC详情
/// BC变更后详情
/// 返回回执
Task ExcuteCompare(TaskBCInfoDto bcSrcDto, TaskBCInfoDto bcTargetDto);
///
/// 推送BC变更比对
///
/// 原舱位详情
/// 变更后舱位详情
/// 舱位主键
/// 请求批次号用来区分对应的哪个批次任务
///
Task PushCompareBCInfo(TaskBCInfoDto bcSrcDto, TaskBCInfoDto bcTargetDto, long slotId, string reqBatchNo);
}
}