wanshenmean
3 天以前 4b483d9d06bead231b88ca212fd799196668a057
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
@@ -1,5 +1,4 @@
using Autofac;
using Newtonsoft.Json;
using Newtonsoft.Json;
using Serilog;
using System.Diagnostics.CodeAnalysis;
using WIDESEA_Core;
@@ -12,6 +11,7 @@
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;
@@ -29,9 +29,10 @@
        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>
        /// 初始化出库任务流程服务。
@@ -39,21 +40,33 @@
        /// <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任务时初始化出库任务。
@@ -180,14 +193,14 @@
                    _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}");
@@ -228,7 +241,7 @@
            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任务失败");