using DS.Module.Core;
using DS.Module.Core.Data;
using DS.Module.DjyServiceStatus;
using DS.WMS.Core.Op.Dtos;
using DS.WMS.Core.Op.Entity;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
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);
///
/// 舱位接收保存、取消接口(任务台使用)
///
Task> ApiReceiveTask(TaskFlowDataContext dataContext);
///
/// 获取舱位详情
///
/// 舱位ID
/// 返回详情
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> ImportSlots(ImportSlotsDto model);
///
/// 库存台账查询
///
/// 查询条件
///
Task>> GetPageStockAsync(PageRequest querySearch);
///
/// 刷新库存
///
/// 请求参数
/// 返回回执
Task> RefreshStock(BookingSlotStockUpdateModel input);
///
/// 保存舱位
///
/// 舱位详情
/// 返回输出
Task> Save(BookingSlotBaseSaveInput input);
///
/// 获取附件
///
/// 舱位主键
/// 返回附件列表
Task>> GetFile(long id);
///
/// 舱位台账查询
///
/// 查询条件
///
Task>> GetPageAsync(PageRequest querySearch);
///
/// 舱位接收保存、取消接口
///
///
///
///
///
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);
///
/// 导出舱位为Excel
///
/// 请求参数
///
Task> ExportOrder(PageRequest querySearch);
///
/// 作废舱位(可以批量)
///
/// 舱位主键数组
/// 返回回执
Task Delete(long[] ids);
///
/// 查询指定舱位可用的箱子列表
///
/// 舱位主键
/// 可用的箱子列表
Task>> GetAvailableCtnsBySlot(long slotId);
///
/// 生成订舱
///
/// 舱位详情
/// 舱位附件列表
/// 订舱请求详情
/// 合票的主舱位提单号(合票时必传)
/// 返回订舱ID
Task GenerateBookingOrder(BookingSlotBase bookingSlotBase, List bookingSlotFileList, BookingGenerateDto generateModel, string masterBookingSlotNo);
///
/// 获取现舱位查询
///
/// 查询条件
///
Task>> GetAvailableBookingSlots(PageRequest querySearch);
///
/// 引入现舱关联海运出口
///
/// 请求参数
///
Task> BringInBookingSlotToOrder(BringInBookingSlotReq model);
///
/// 获取舱位用途配置列表
///
///
Task>> GetSlotUseToConfig();
///
/// 舱位对外开放更新接口
///
/// 舱位更新请求
/// 返回回执
Task BookingSlotOpenEdit(BookingSlotOpenEditReq req);
///
/// 同步订单更新舱位
///
/// 同步订单更新舱位请求
/// 返回回执
Task SyncBookingOrderToSlot(BookingOrderToSlotDto req);
}
}