using DS.Module.Core;
using DS.WMS.Core.TaskPlat.Dtos;
using DS.WMS.Core.TaskPlat.Entity;
using SqlSugar;
using System.Linq.Expressions;
namespace DS.WMS.Core.TaskPlat.Interface
{
///
/// 任务模块业务类的基类,封装了一些常用的方法
///
public interface ITaskManageBaseService
{
///
/// 更新任务主表状态
///
/// 任务主键数组
/// 需要更新状态的列
Task SetTaskStatus(long[] taskIds, params Expression>[] columns);
///
/// 设置任务处理人
///
/// 任务主键数组
/// 人员信息列表
Task SetTaskOwner(long[] taskIds, List userInfo);
///
/// 根据任务ID获取附件信息
///
/// 任务Id
/// 附件分类代码
Task<(string fileFullPath, string fileName)> GetTaskFileInfo(long taskId, string fileCategory);
///
/// 根据订单及配置,将所有或指定的公共任务匹配到个人
///
/// 任务Id列表(当传入时,则只匹配列表中指定的任务)
/// 涉及当前登陆人的匹配结果
Task> MatchTask(List? taskIdList = null);
///
/// 通过任务主表主键设置任务状态(任务台使用)
///
/// 任务主表主键
/// 业务状态
/// 状态发生时间
/// 业务主键
Task SetTaskStatus(long taskBaseId, TaskStatusEnum taskStatusEnum, DateTime? statusTime, long? bsno = null);
///
/// 是否具有指定任务列表的处理权限
///
/// 成功:全部具有处理权限;失败:存在不具有处理权限的任务,同时返回任务流水号列表
Task>> HasTaskHandleAuthorityWithBsno(IEnumerable<(long bsno, TaskBaseTypeEnum taskType)> businessTaskList);
///
/// 是否具有指定任务列表的处理权限
///
/// 成功:全部具有处理权限;失败:存在不具有处理权限的任务,同时返回任务流水号列表
Task>> HasTaskHandleAuthority(IEnumerable taskIdList);
///
/// 根据订单Id列表获取关联的任务流水号
///
Task>> GetSeaExportAllotTaskNo(IEnumerable seaExportIdList);
///
/// 获取不创建任务的任务类型列表
///
Task> GetNotCreateTaskTypeList(SqlSugarScopeProvider? tenantDb = null);
}
}