using DS.Module.Core;
using DS.Module.DjyServiceStatus;
using DS.WMS.Core.Op.Dtos;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DS.WMS.Core.Op.Interface
{
///
/// 舱位管理
///
public interface IBookingSlotService
{
///
/// 舱位接收保存、取消接口
///
/// 请求详情(JSON)
/// BC附件
/// BC修改附件
///
Task> ApiReceive(string jsonData, IFormFile file = null, IFormFile modifyFile = null);
///
/// 获取舱位详情
///
/// 舱位ID
/// 返回详情
Task> Detail(long id);
///
/// 查询可用的舱位及箱子列表
///
/// 筛选条件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, BookingGenerateDto generateModel = null);
///
///
///
///
///
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);
///
/// 请求BC比对
///
/// BC详情
/// BC变更后详情
/// 返回回执
Task ExcuteCompare(ParserBCInfoDto bcSrcDto, ParserBCInfoDto bcTargetDto);
///
/// 推送BC变更比对
///
/// 原舱位详情
/// 变更后舱位详情
/// 舱位主键
/// 请求批次号用来区分对应的哪个批次任务
///
Task PushCompareBCInfo(ParserBCInfoDto bcSrcDto, ParserBCInfoDto bcTargetDto, long slotId, string reqBatchNo);
///
/// 估算差异重要提醒
///
/// 原舱位详情
/// 新舱位详情
/// 舱位ID
///
Task MeasureDiffCautionTask(ParserBCInfoDto bcSrcDto, ParserBCInfoDto bcTargetDto, long slotId);
///
/// 订舱编号检索舱位信息
///
/// 订舱编号
/// 船公司ID
///
Task QueryBookingSlot(string slotBookingNo, string CarrierId);
///
/// 获取舱位详情列表
///
/// 舱位ID组
/// 返回舱位详情
Task> GetSlotList(long[] ids);
///
/// 获取合票详情(生成合票需要先调此方法)
///
///
///
Task GetMergeList(QueryMergeSlotDto model);
///
/// 生成合票订舱订单
///
/// 生成订舱订单请求
/// 返回回执
Task MergeCreateBookingOrder(BookingGenerateDto model);
}
}