| | |
| | | using Newtonsoft.Json; |
| | | using Autofac; |
| | | using Newtonsoft.Json; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.Enums; |
| | | using WIDESEAWCS_DTO; |
| | | using WIDESEAWCS_DTO.Stock; |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob.DTO; |
| | |
| | | private readonly IRouterService _routerService; |
| | | private readonly HttpClientHelper _httpClientHelper; |
| | | private readonly IRobotTaskService _robotTaskService; |
| | | private readonly ITaskRepository _taskRepository; |
| | | private readonly IComponentContext _componentContext; |
| | | |
| | | /// <summary> |
| | | /// 初始化出库任务流程服务。 |
| | |
| | | /// <param name="routerService">路由服务。</param> |
| | | /// <param name="httpClientHelper">WMS接口调用帮助类。</param> |
| | | /// <param name="robotTaskService">机械手任务服务。</param> |
| | | public OutboundTaskFlowService(IRouterService routerService, HttpClientHelper httpClientHelper, IRobotTaskService robotTaskService) |
| | | /// <param name="taskRepository">任务仓储(用于删除出库任务)。</param> |
| | | /// <param name="componentContext">Autofac组件上下文(用于延迟解析ITaskService以避免循环依赖)。</param> |
| | | public OutboundTaskFlowService(IRouterService routerService, HttpClientHelper httpClientHelper, IRobotTaskService robotTaskService, ITaskRepository taskRepository, IComponentContext componentContext) |
| | | { |
| | | _routerService = routerService; |
| | | _httpClientHelper = httpClientHelper; |
| | | _robotTaskService = robotTaskService; |
| | | _taskRepository = taskRepository; |
| | | _componentContext = componentContext; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 延迟解析ITaskService以避免循环依赖 |
| | | /// </summary> |
| | | private ITaskService TaskService => _componentContext.Resolve<ITaskService>(); |
| | | |
| | | /// <summary> |
| | | /// 接收WMS任务时初始化出库任务。 |
| | |
| | | |
| | | if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty) |
| | | { |
| | | return _robotTaskService.GetWMSRobotTask(task); |
| | | WebResponseContent content = _robotTaskService.GetWMSRobotTask(task); |
| | | if (!content.Status) |
| | | { |
| | | return content; |
| | | } |
| | | return OutboundFinishTaskTray(task); |
| | | } |
| | | |
| | | if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting) |
| | |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | |
| | | content = NotifyWMSOutboundFinish(task); |
| | | if (!content.Status) |
| | | // 通知WMS出库完成并获取返回结果 |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.OutboundFinishTaskAsync), |
| | | new StockInfoDTO { PalletCode = task.PalletCode, TaskNum = task.TaskNum }.ToJson()); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | return content; |
| | | return content.Error($"通知WMS系统堆垛机出库完成失败,任务号:【{task.TaskNum}】,托盘号:【{task.PalletCode}】,错误信息:【{result.Data?.Message}】"); |
| | | } |
| | | |
| | | return content.Error($"通知WMS系统堆垛机出库完成成功,任务号:【{task.TaskNum}】,托盘号:【{task.PalletCode}】"); |
| | | // 处理WMS返回的入库任务(如果有) |
| | | if (result.Data?.Data != null) |
| | | { |
| | | var inboundTaskJson = result.Data.Data.ToString(); |
| | | var inboundTaskDto = JsonConvert.DeserializeObject<WMSTaskDTO>(inboundTaskJson); |
| | | |
| | | if (inboundTaskDto != null) |
| | | { |
| | | // 先删除本地出库任务,避免托盘号唯一键冲突 |
| | | _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成); |
| | | |
| | | // 调用ReceiveWMSTask创建本地入库任务 |
| | | var receiveResult = TaskService.ReceiveWMSTask(new List<WMSTaskDTO> { inboundTaskDto }); |
| | | if (!receiveResult.Status) |
| | | { |
| | | return content.Error($"创建本地入库任务失败: {receiveResult.Message}"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return content.OK($"通知WMS系统堆垛机出库完成成功,任务号:【{task.TaskNum}】,托盘号:【{task.PalletCode}】"); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 空托盘出库完成同步到WMS。 |
| | | /// </summary> |
| | | /// <param name="task">任务实体。</param> |
| | | /// <returns>同步结果。</returns> |
| | | private WebResponseContent OutboundFinishTaskTray(Dt_Task task) |
| | | { |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.OutboundFinishTaskTray), |
| | | new CreateTaskDto { PalletCode = task.PalletCode, SourceAddress = task.SourceAddress }.ToJson()); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | return WebResponseContent.Instance.Error($"调用WMS接口更新任务状态失败,任务号:【{task.TaskNum}】,错误信息:【{result.Data?.Message}】"); |
| | | |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | } |
| | | } |