using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Myshipping.Application.Entity;
using Myshipping.Application.Event;
using Myshipping.Application.Service.BookingSlot.Dto;
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);
///
/// 查询可用的舱位及箱子列表
///
/// 筛选条件1:舱位信息、箱型
/// 筛选条件2:舱位主键列表
/// 可用的舱位列表(含可用的箱子列表)
Task> GetAvailableSlots(BookingSlotBaseDto slotInput = null, List slotIdListInput = 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);
}
}