| | |
| | | using Autofac; |
| | | using Newtonsoft.Json; |
| | | using Newtonsoft.Json; |
| | | using Serilog; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using WIDESEA_Core; |
| | |
| | | using WIDESEAWCS_DTO; |
| | | using WIDESEAWCS_DTO.Stock; |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | |
| | | private readonly IRouterService _routerService; |
| | | private readonly HttpClientHelper _httpClientHelper; |
| | | private readonly IRobotTaskService _robotTaskService; |
| | | private readonly IComponentContext _componentContext; |
| | | private readonly ITaskRepository _taskRepository; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly ILogger _logger; |
| | | private Func<List<WMSTaskDTO>, WebResponseContent> _receiveWMSTaskFunc; |
| | | |
| | | /// <summary> |
| | | /// 初始化出库任务流程服务。 |
| | |
| | | /// <param name="routerService">路由服务。</param> |
| | | /// <param name="httpClientHelper">WMS接口调用帮助类。</param> |
| | | /// <param name="robotTaskService">机械手任务服务。</param> |
| | | /// <param name="componentContext">Autofac组件上下文(用于延迟解析ITaskService以避免循环依赖)。</param> |
| | | public OutboundTaskFlowService(IRouterService routerService, HttpClientHelper httpClientHelper, IRobotTaskService robotTaskService, IComponentContext componentContext, IUnitOfWorkManage unitOfWorkManage, ILogger logger) |
| | | /// <param name="taskRepository">任务仓储(用于删除/归档任务)。</param> |
| | | /// <param name="unitOfWorkManage">工作单元管理器。</param> |
| | | /// <param name="logger">日志记录器。</param> |
| | | public OutboundTaskFlowService( |
| | | IRouterService routerService, |
| | | HttpClientHelper httpClientHelper, |
| | | IRobotTaskService robotTaskService, |
| | | ITaskRepository taskRepository, |
| | | IUnitOfWorkManage unitOfWorkManage, |
| | | ILogger logger) |
| | | { |
| | | _routerService = routerService; |
| | | _httpClientHelper = httpClientHelper; |
| | | _robotTaskService = robotTaskService; |
| | | _componentContext = componentContext; |
| | | _taskRepository = taskRepository; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _logger = logger; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 延迟解析ITaskService以避免循环依赖 |
| | | /// 设置接收WMS任务的委托(由TaskService在构造后调用,避免循环依赖)。 |
| | | /// </summary> |
| | | private ITaskService TaskService => _componentContext.Resolve<ITaskService>(); |
| | | /// <param name="receiveWMSTaskFunc">接收WMS任务的方法委托。</param> |
| | | public void SetReceiveWMSTaskDelegate(Func<List<WMSTaskDTO>, WebResponseContent> receiveWMSTaskFunc) |
| | | { |
| | | _receiveWMSTaskFunc = receiveWMSTaskFunc; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 接收WMS任务时初始化出库任务。 |
| | |
| | | _unitOfWorkManage.BeginTran(() => |
| | | { |
| | | // 先删除本地出库任务,避免托盘号唯一键冲突 |
| | | bool isDeleted = TaskService.Repository.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成); |
| | | bool isDeleted = _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成); |
| | | if (!isDeleted) |
| | | { |
| | | return content.Error($"删除本地出库任务失败,任务号:【{task.TaskNum}】,托盘号:【{task.PalletCode}】"); |
| | | } |
| | | |
| | | // 调用ReceiveWMSTask创建本地入库任务 |
| | | var receiveResult = TaskService.ReceiveWMSTask(new List<WMSTaskDTO> { inboundTaskDto }); |
| | | // 调用ReceiveWMSTask委托创建本地入库任务 |
| | | var receiveResult = _receiveWMSTaskFunc(new List<WMSTaskDTO> { inboundTaskDto }); |
| | | if (!receiveResult.Status) |
| | | { |
| | | return content.Error($"创建本地入库任务失败: {receiveResult.Message}"); |
| | |
| | | if (wMSTask == null) |
| | | return WebResponseContent.Instance.Error($"获取WMS系统空托盘出库任务失败,任务号:【{task.TaskNum}】,托盘号:【{task.PalletCode}】,错误信息:【WMS未返回有效任务数据】"); |
| | | |
| | | if (TaskService.ReceiveWMSTask(new List<WMSTaskDTO> { wMSTask }).Status) |
| | | if (_receiveWMSTaskFunc(new List<WMSTaskDTO> { wMSTask }).Status) |
| | | return WebResponseContent.Instance.OK("成功"); |
| | | |
| | | return WebResponseContent.Instance.Error("接收WMS任务失败"); |