xxyy
2025-02-18 3b3f39b55ba6d04a95536bebd6233b2a6e464290
更新命名空间、异常处理和任务逻辑

在多个文件中更新了命名空间和代码逻辑:
- 修改了 `WIDESEAWCS_TaskInfoService` 命名空间,增强了异常处理和任务请求失败处理。
- 新增 WMS 任务同步逻辑,并改进栈车任务状态判断。
- 对任务状态更新和日志输出进行了增强,提升了任务执行监控能力。
- 更新了 `SetEmptyOutbyInToOutAsync` 方法的查询逻辑,并新增 `SetEmptyOutbyInToOutOneAsync` 方法。
- 修改了 `RequestInTaskAsync.cs` 文件中的 `needCount` 比较逻辑,优化了站台查询及在途数量更新逻辑。
已修改6个文件
427 ■■■■ 文件已修改
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs 333 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerStationJob/CommonStackerStationCraneJob.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/RequestInTaskAsync.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs
@@ -80,6 +80,11 @@
        /// <summary>
        /// 分容空框入库改为直接出库
        /// </summary>
        public const string SetEmptyOutbyInToOutAsync = "SetEmptyOutbyInToOutAsync";
        public const string SetEmptyOutbyInToOutAsync = "SetEmptyOutbyInToOutAsync";
        /// <summary>
        /// 分容空框出库改为直接出库
        /// </summary>
        public const string SetEmptyOutbyInToOutOneAsync = "SetEmptyOutbyInToOutOneAsync";
    }
}
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs
@@ -1,28 +1,18 @@
using HslCommunication;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core;
using WIDESEAWCS_DTO.TaskInfo;
using System.Diagnostics.CodeAnalysis;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
using System.Drawing;
using WIDESEAWCS_ITaskInfoService;
using Mapster;
using AngleSharp.Io;
using Newtonsoft.Json;
using System.Diagnostics.CodeAnalysis;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_TaskInfoService
{
    public partial class TaskService
    {
        /// <summary>
        /// 根据托盘号、起始地址向WMS请求任务
        /// </summary>
@@ -56,7 +46,6 @@
                {
                    // wms失败返回去NG口任务
                    return content;
                }
@@ -69,65 +58,105 @@
            }
        }
        #region 根据托盘号、站台向WMS请求任务
        /// <summary>
        /// 根据托盘号、站台向WMS请求任务
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="sourceAddress">起始地址</param>
        /// <param name="stationManager">站台</param>
        /// <returns></returns>
        public async Task<WebResponseContent> RequestTask(string palletCode, Dt_StationManager stationManager)
        public async Task<WebResponseContent> RequestTask1(string palletCode, Dt_StationManager stationManager)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                StaticVariable.isLineRun = false;
                var hasTask = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode);
                if (hasTask != null)
                {
                    return content.Error("当前托盘存在任务");
                }
                var Station = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 6 && x.productLine == stationManager.productLine && x.stationArea == stationManager.stationArea);
               var tasks= await BaseDal.QueryFirstAsync(x => x.TaskType == (int)TaskOutboundTypeEnum.InToOut && x.TargetAddress == stationManager.stationLocation && x.CurrentAddress == Station.stationChildCode);
                if(tasks!=null)
                var tasks = await BaseDal.QueryFirstAsync(x => x.TaskType == (int)TaskOutboundTypeEnum.InToOut && x.TargetAddress == stationManager.stationLocation && x.CurrentAddress == Station.stationChildCode);
                if (tasks != null)
                {
                    ConsoleHelper.WriteErrorLine($"【{stationManager.stationChildCode}】已存在直接出库任务任务");
                    return content.Error($"【{stationManager.stationChildCode}】已存在直接出库任务任务");
                }
                if (stationManager.stationType == 7)
                if (StaticVariable.isStackerRun)
                {
                    var runTask = await BaseDal.QueryFirstAsync(x => x.CurrentAddress == Station.stationChildCode && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.TaskType == (int)TaskInboundTypeEnum.InTray);
                    if (runTask != null)
                    if (stationManager.stationType == 7)
                    {
                        runTask.TargetAddress = stationManager.stationLocation;
                        runTask.NextAddress = stationManager.stationChildCode;
                        runTask.Grade = 3;
                        runTask.TaskType = (int)TaskOutboundTypeEnum.InToOut;
                        runTask.TaskState = (int)TaskOutStatusEnum.OutNew;
                        var config1 = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                        var wmsBase1 = config1.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                        var requestTask1 = config1.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.SetEmptyOutbyInToOutAsync)?.ConfigValue;
                        if (wmsBase1 == null || requestTask1 == null)
                        var runTask = await BaseDal.QueryFirstAsync(x => x.CurrentAddress == Station.stationChildCode && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.TaskType == (int)TaskInboundTypeEnum.InTray);
                        if (runTask != null)
                        {
                            throw new InvalidOperationException("WMS IP 未配置");
                        }
                        var wmsIpAddrss1 = wmsBase1 + requestTask1;
                            runTask.TargetAddress = stationManager.stationLocation;
                            runTask.NextAddress = stationManager.stationChildCode;
                            runTask.Grade = 3;
                            runTask.TaskType = (int)TaskOutboundTypeEnum.InToOut;
                            runTask.TaskState = (int)TaskOutStatusEnum.OutNew;
                        var result1 = await HttpHelper.PostAsync(wmsIpAddrss1, new { palletCode = runTask.PalletCode, EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = Station.stationChildCode }.ToJsonString());
                        content = JsonConvert.DeserializeObject<WebResponseContent>(result1);
                        if (content.Status)
                        {
                            await BaseDal.UpdateDataAsync(runTask);
                            ConsoleHelper.WriteSuccessLine($"【{runTask.PalletCode}直接出库至二封】");
                            return content.OK("成功");
                            var config1 = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                            var wmsBase1 = config1.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                            var requestTask1 = config1.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.SetEmptyOutbyInToOutAsync)?.ConfigValue;
                            if (wmsBase1 == null || requestTask1 == null)
                            {
                                throw new InvalidOperationException("WMS IP 未配置");
                            }
                            var wmsIpAddrss1 = wmsBase1 + requestTask1;
                            var result1 = await HttpHelper.PostAsync(wmsIpAddrss1, new { palletCode = runTask.PalletCode, EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = Station.stationChildCode }.ToJsonString());
                            content = JsonConvert.DeserializeObject<WebResponseContent>(result1);
                            if (content.Status)
                            {
                                await BaseDal.UpdateDataAsync(runTask);
                                ConsoleHelper.WriteSuccessLine($"【{runTask.PalletCode}直接出库至二封】");
                                return content.OK("成功");
                            }
                            else
                                ConsoleHelper.WriteErrorLine(content.Message);
                        }
                        else
                            ConsoleHelper.WriteErrorLine(content.Message);
                            ConsoleHelper.WriteErrorLine($"【{Station.stationChildCode}】未找到空托盘入库任务");
                    }
                    else
                        ConsoleHelper.WriteErrorLine($"【{Station.stationChildCode}】未找到空托盘入库任务");
                }
                    else if (stationManager.stationType == 6)
                    {
                        var emptyStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 7 && x.productLine == stationManager.productLine && x.stationArea == stationManager.stationArea);
                        var runTask = await BaseDal.QueryFirstAsync(x => x.NextAddress == emptyStation.stationChildCode && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.TaskType == (int)TaskInboundTypeEnum.InTray);
                        if (runTask != null)
                        {
                            runTask.SourceAddress = stationManager.stationLocation;
                            runTask.CurrentAddress = stationManager.stationChildCode;
                            runTask.Grade = 3;
                            runTask.TaskType = (int)TaskOutboundTypeEnum.InToOut;
                            runTask.TaskState = (int)TaskOutStatusEnum.OutNew;
                            runTask.PalletCode = palletCode;
                            var config1 = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                            var wmsBase1 = config1.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                            var requestTask1 = config1.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.SetEmptyOutbyInToOutOneAsync)?.ConfigValue;
                            if (wmsBase1 == null || requestTask1 == null)
                            {
                                throw new InvalidOperationException("WMS IP 未配置");
                            }
                            var wmsIpAddrss1 = wmsBase1 + requestTask1;
                            var result1 = await HttpHelper.PostAsync(wmsIpAddrss1, new { palletCode = runTask.PalletCode, EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = emptyStation.stationChildCode }.ToJsonString());
                            content = JsonConvert.DeserializeObject<WebResponseContent>(result1);
                            if (content.Status)
                            {
                                await BaseDal.UpdateDataAsync(runTask);
                                ConsoleHelper.WriteSuccessLine($"【{runTask.PalletCode}直接出库至二封】");
                                return content.OK("成功");
                            }
                            else
                                ConsoleHelper.WriteErrorLine(content.Message);
                        }
                    }
                }
                var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestInTask)?.ConfigValue;
@@ -168,7 +197,190 @@
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
            finally
            {
                StaticVariable.isLineRun = true;
            }
        }
        /// <summary>
        /// 根据托盘号、站台向WMS请求任务
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="stationManager">站台</param>
        /// <returns></returns>
        public async Task<WebResponseContent> RequestTask(string palletCode, Dt_StationManager stationManager)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                StaticVariable.isLineRun = false;
                // 检查当前托盘是否存在任务
                if (await HasTask(palletCode))
                {
                    return content.Error("当前托盘存在任务");
                }
                // 检查是否已存在直接出库任务
                if (await HasDirectOutboundTask(stationManager))
                {
                    return content.Error($"【{stationManager.stationChildCode}】已存在直接出库任务任务");
                }
                if (StaticVariable.isStackerRun)
                {
                    if (stationManager.stationType == 7)
                    {
                        var result = await HandleStationType7(palletCode, stationManager);
                        if (result != null)
                        {
                            return result;
                        }
                    }
                    else if (stationManager.stationType == 6)
                    {
                        var result = await HandleStationType6(palletCode, stationManager);
                        if (result != null)
                        {
                            return result;
                        }
                    }
                }
                // 发起请求获取入库任务
                content = await RequestInTask(palletCode, stationManager);
                ConsoleHelper.WriteErrorLine($"{stationManager.stationChildCode}站台请求响应信息:{content.ToJsonString()}");
                if (!content.Status)
                {
                    return content;
                }
                var task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                ConsoleHelper.WriteSuccessLine(content.Data.ToString());
                return ReceiveByWMSTask(task);
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
            finally
            {
                StaticVariable.isLineRun = true;
            }
        }
        // 检查当前托盘是否存在任务
        private async Task<bool> HasTask(string palletCode)
        {
            var hasTask = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode);
            return hasTask != null;
        }
        // 检查是否已存在直接出库任务
        private async Task<bool> HasDirectOutboundTask(Dt_StationManager stationManager)
        {
            var station = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 6 && x.productLine == stationManager.productLine && x.stationArea == stationManager.stationArea);
            var tasks = await BaseDal.QueryFirstAsync(x => x.TaskType == (int)TaskOutboundTypeEnum.InToOut && x.TargetAddress == stationManager.stationLocation && x.CurrentAddress == station.stationChildCode);
            return tasks != null;
        }
        // 处理 stationType 为 7 的情况
        private async Task<WebResponseContent> HandleStationType7(string palletCode, Dt_StationManager stationManager)
        {
            var station = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 6 && x.productLine == stationManager.productLine && x.stationArea == stationManager.stationArea);
            var runTask = await BaseDal.QueryFirstAsync(x => x.CurrentAddress == station.stationChildCode && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.TaskType == (int)TaskInboundTypeEnum.InTray);
            if (runTask != null)
            {
                runTask.TargetAddress = stationManager.stationLocation;
                runTask.NextAddress = stationManager.stationChildCode;
                runTask.Grade = 3;
                runTask.TaskType = (int)TaskOutboundTypeEnum.InToOut;
                runTask.TaskState = (int)TaskOutStatusEnum.OutNew;
                var wmsIpAddrss = GetWmsIpAddress(SysConfigKeyConst.SetEmptyOutbyInToOutAsync);
                var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = runTask.PalletCode, EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = station.stationChildCode }.ToJsonString());
                var content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                if (content.Status)
                {
                    await BaseDal.UpdateDataAsync(runTask);
                    ConsoleHelper.WriteSuccessLine($"【{runTask.PalletCode}直接出库至二封】");
                    return content.OK("成功");
                }
                else
                {
                    ConsoleHelper.WriteErrorLine(content.Message);
                }
            }
            else
            {
                ConsoleHelper.WriteErrorLine($"【{station.stationChildCode}】未找到空托盘入库任务");
            }
            return null;
        }
        // 处理 stationType 为 6 的情况
        private async Task<WebResponseContent> HandleStationType6(string palletCode, Dt_StationManager stationManager)
        {
            var emptyStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 7 && x.productLine == stationManager.productLine && x.stationArea == stationManager.stationArea);
            var runTask = await BaseDal.QueryFirstAsync(x => x.NextAddress == emptyStation.stationChildCode && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.TaskType == (int)TaskInboundTypeEnum.InTray);
            if (runTask != null)
            {
                runTask.SourceAddress = stationManager.stationLocation;
                runTask.CurrentAddress = stationManager.stationChildCode;
                runTask.Grade = 3;
                runTask.TaskType = (int)TaskOutboundTypeEnum.InToOut;
                runTask.TaskState = (int)TaskOutStatusEnum.OutNew;
                runTask.PalletCode = palletCode;
                var wmsIpAddrss = GetWmsIpAddress(SysConfigKeyConst.SetEmptyOutbyInToOutAsync);
                var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = runTask.PalletCode, EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = emptyStation.stationChildCode }.ToJsonString());
                var content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                if (content.Status)
                {
                    await BaseDal.UpdateDataAsync(runTask);
                    ConsoleHelper.WriteSuccessLine($"【{runTask.PalletCode}直接出库至二封】");
                    return content.OK("成功");
                }
                else
                {
                    ConsoleHelper.WriteErrorLine(content.Message);
                }
            }
            return null;
        }
        // 获取 WMS 请求地址
        private string GetWmsIpAddress(string configKey)
        {
            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
            var requestTask = config.FirstOrDefault(x => x.ConfigKey == configKey)?.ConfigValue;
            if (wmsBase == null || requestTask == null)
            {
                throw new InvalidOperationException("WMS IP 未配置");
            }
            return wmsBase + requestTask;
        }
        // 发起请求获取入库任务
        private async Task<WebResponseContent> RequestInTask(string palletCode, Dt_StationManager stationManager)
        {
            var wmsIpAddrss = GetWmsIpAddress(SysConfigKeyConst.RequestInTask);
            var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = palletCode, EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = stationManager.stationChildCode }.ToJsonString());
            return JsonConvert.DeserializeObject<WebResponseContent>(result);
        }
        #endregion 根据托盘号、站台向WMS请求任务
        public async Task<WebResponseContent> RequestOutTaskToBZAsync(Dt_StationManager stationManager)
        {
@@ -206,7 +418,6 @@
            }
            catch (Exception ex)
            {
                return content.Error(ex.Message);
            }
        }
@@ -307,7 +518,6 @@
            return content;
        }
        /// <summary>
        /// 高温出库
        /// </summary>
@@ -346,7 +556,6 @@
            return content;
        }
        /// <summary>
        /// 接收WMS任务信息
        /// </summary>
@@ -371,7 +580,6 @@
                if (!content.Status)
                {
                    return content;
                }
                Dt_StationManager dt_Station = content.Data as Dt_StationManager;
@@ -420,7 +628,7 @@
                //if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                //{
                //    //todo
                //    //todo
                //}
                //else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
@@ -442,8 +650,8 @@
                //    throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】");
                //}
                #region WMS同步任务完成
                var keys = new Dictionary<string, object>()
                {
                    {"taskNum", taskNum}
@@ -460,7 +668,8 @@
                var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result;
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                #endregion
                #endregion WMS同步任务完成
                if (content.Status)
                {
@@ -470,7 +679,7 @@
                    BaseDal.DeleteData(task);
                }
                #region  更新任务状态
                #region 更新任务状态
                //var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.UpdateTask)?.ConfigValue;
                //if (wmsBase == null || updateTask == null)
@@ -481,7 +690,9 @@
                //result = HttpHelper.PostAsync(wmsIpAddress, new { TaskNum = task.TaskNum, TaskState = task.TaskState }.ToJsonString()).Result;
                //content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                #endregion
                #endregion 更新任务状态
                //content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
@@ -491,4 +702,4 @@
            return content;
        }
    }
}
}
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs
@@ -1,4 +1,5 @@
#region MyRegion
#region << 版 本 注 释 >>
/*----------------------------------------------------------------
@@ -20,19 +21,15 @@
using AutoMapper;
using HslCommunication;
using Microsoft.AspNetCore.Server.HttpSys;
using Newtonsoft.Json;
using Quartz;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Threading.Tasks;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_BasicInfoService;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_DTO.TaskInfo;
@@ -41,7 +38,6 @@
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_SignalR;
@@ -128,6 +124,7 @@
                    }
                    #region 路由方式
                    //List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
                    //foreach (string childDeviceCode in childDeviceCodes)
                    //{
@@ -144,8 +141,9 @@
                    //            method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode });
                    //        }
                    //    }
                    //}
                    #endregion
                    //}
                    #endregion 路由方式
                }
            }
            catch (Exception ex)
@@ -193,7 +191,7 @@
                        }
                    }
                }
                else   //如果任务请求失败
                else   //如果任务请求失败
                {
                    //如果请求位置与NG位置一致 则写当前位置让线体退回
                    if (stationInfo.stationChildCode == stationInfo.stationNGChildCode)
@@ -309,4 +307,5 @@
        }
    }
}
#endregion
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerStationJob/CommonStackerStationCraneJob.cs
@@ -22,6 +22,7 @@
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_SignalR;
using WIDESEAWCS_Tasks.StackerCraneJob;
using WIDESEAWCS_Common;
namespace WIDESEAWCS_Tasks
{
@@ -67,7 +68,12 @@
                        if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                        {
                            Dt_Task? task = GetTask(commonStackerCrane);
                            Dt_Task? task = null;
                            if (StaticVariable.isLineRun)
                            {
                                StaticVariable.isStackerRun = false;
                                task = GetTask(commonStackerCrane);
                            }
                            if (task != null)
                            {
                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
@@ -125,6 +131,10 @@
                WriteError("CommonStackerStationCraneJob", "test", ex);
                //Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
            }
            finally
            {
                StaticVariable.isStackerRun = true;
            }
            //WriteDebug("CommonStackerStationCraneJob", "test");
            return Task.CompletedTask;
        }
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -1,5 +1,4 @@
using Masuit.Tools;
using WIDESEA_Common;
using WIDESEA_Common.CustomModels;
//using WIDESEA_Common.CustomModels;
@@ -1156,10 +1155,11 @@
    #endregion
    #region 分容空框入库改为直接出库
    public async Task<WebResponseContent> SetEmptyOutbyInToOutAsync(RequestTaskDto request)
    {
        WebResponseContent content = new WebResponseContent();
        var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == request.PalletCode && x.CurrentAddress == request.Position);
        var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == request.PalletCode);
        if (!task.IsNullOrEmpty())
        {
            var fromStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == request.Position);
@@ -1194,4 +1194,50 @@
    }
    #endregion
    #region 分容空框出库改为直接出库
    /// <summary>
    /// 分容空框出库改为直接出库
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> SetEmptyOutbyInToOutOneAsync(RequestTaskDto request)
    {
        WebResponseContent content = new WebResponseContent();
        var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == request.PalletCode);
        if (!task.IsNullOrEmpty())
        {
            var toStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == request.Position);
            var fromStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 6 && x.productLine == toStation.productLine && x.stationArea == toStation.stationArea);
            if (!fromStation.IsNullOrEmpty())
            {
                //var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.AreaId == int.Parse(fromStation.stationArea));
                task.SourceAddress = toStation.stationLocation;
                task.CurrentAddress = toStation.stationChildCode;
                task.Grade = 3;
                task.TaskType = (int)TaskOutboundTypeEnum.InToOut;
                task.TaskState = (int)TaskOutStatusEnum.OutNew;
                //location.LocationStatus = (int)LocationEnum.Free;
                //await _locationRepository.UpdateDataAsync(location);
                await BaseDal.UpdateDataAsync(task);
                return content.OK("成功");
            }
            else
            {
                ConsoleHelper.WriteErrorLine("分容空框出库改为直接出库:未找到对应站台");
                content.Error("未找到对应站台");
            }
        }
        else
        {
            ConsoleHelper.WriteErrorLine("分容空框出库改为直接出库:未找到任务");
            content.Error("未找到任务");
        }
        return content;
    }
    #endregion
}
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/RequestInTaskAsync.cs
@@ -78,12 +78,14 @@
        var needBarcode = await SqlSugarHelper.DbWCS.Queryable<dt_needBarcode>().FirstAsync(x => x.productLine == STATION.productLine);
        var needCount = needBarcode.inLineNum;
        //var count = BaseDal.QueryData(x => x.TargetAddress == stationManagers[0].Roadway).Count;
        if (needCount < 2)
        if (needCount < needBarcode.cacheNum)
        {
            // 送至包装
            List<string> strings = stationManagers.Where(x => x.stationType == 0).Select(x => x.Roadway).ToList();
            var x = await SqlSugarHelper.DbWCS.Updateable<dt_needBarcode>().SetColumns(x => x.inLineNum == x.inLineNum + 1).ExecuteCommandHasChangeAsync();
            ConsoleHelper.WriteSuccessLine($"在途数量添加{(x ? "成功" : "失败")}数量+1");
            List<string> strings = stationManagers.Where(x => x.stationType == 0 && x.productLine == input.ProductionLine).Select(x => x.Roadway).ToList();
            var x = await SqlSugarHelper.DbWCS.Updateable<dt_needBarcode>()
                .SetColumns(x => x.inLineNum == x.inLineNum + 1)
                .Where(x => x.id == needBarcode.id).ExecuteCommandHasChangeAsync();
            ConsoleHelper.WriteSuccessLine($"在途数量添加{(x ? "成功" : "失败")}数量+1,当前工序{boxing.ProcessCode},产线{input.ProductionLine}");
            return await CreateNewTask(input, input.ProductionLine, boxing.ProcessCode, strings, 3);
        }
        else