huangxiaoqiang
6 小时以前 16749e23b489ee24f993fe9e87346680b7bcf63a
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -26,6 +26,7 @@
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_TaskInfoRepository;
namespace WIDESEAWCS_TaskInfoService
{
@@ -53,6 +54,9 @@
        public List<int> TaskInboundTypes => typeof(TaskInboundTypeEnum).GetEnumIndexList();
        public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
        public List<int> TaskRelocationboundTypes => typeof(TaskRelocationStatusEnum).GetEnumIndexList();
        public List<int> TaskAGVCarryboundTypes => typeof(TaskAGVCarryStatusEnum).GetEnumIndexList();
        public List<int> TaskAcrossFloorboundTypes => typeof(TaskAcrossFloorStatusEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ISys_ConfigService sys_ConfigService, IDt_StationManagerService stationManagerService, IDt_StationManagerRepository stationManagerRepository, IRouterRepository routerRepository, ITask_HtyRepository htyRepository) : base(BaseDal)
        {
@@ -95,58 +99,77 @@
                    // åˆ¤æ–­ä»»åŠ¡ç±»åž‹æ˜¯å¦ä¸ºå‡ºåº“ä»»åŠ¡
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    {
                        // åˆ¤æ–­ä»»åŠ¡ç›®æ ‡åœ°å€å’Œè·¯å¾„æ˜¯å¦æ»¡è¶³ç‰¹å®šæ¡ä»¶
                        if (((task.TargetAddress == "002-021-001" || task.TargetAddress == "001-021-001") && task.Roadway.Contains("JZ")) || task.TaskType == (int)TaskOutboundTypeEnum.OutFireAlarm)
                        {
                            // è®¾ç½®ä»»åŠ¡çŠ¶æ€ä¸ºå‡ºåº“æ–°å»º
                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
                            // è®¾ç½®å½“前地址为源地址
                            task.CurrentAddress = item.SourceAddress;
                            // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€ä¸ºç›®æ ‡åœ°å€
                            task.NextAddress = item.TargetAddress;
                        }
                        else
                        {
                            // æŸ¥è¯¢ä¸‹ä¸€ä¸ªè·¯ç”±
                            List<Dt_Router> routers = _routerService.QueryNextRoutes(item.RoadWay, item.TargetAddress);
                            if (routers.Count > 0)
                            {
                                // è®¾ç½®ä»»åŠ¡çŠ¶æ€ä¸ºå‡ºåº“æ–°å»º
                                task.TaskState = (int)TaskOutStatusEnum.OutNew;
                                // è®¾ç½®å½“前地址为源地址
                                task.CurrentAddress = item.SourceAddress;
                                // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€ä¸ºç¬¬ä¸€ä¸ªå­ä½ç½®
                                task.NextAddress = routers.FirstOrDefault().ChildPosi;
                            }
                            else
                            {
                                // æŸ¥è¯¢ä»Žæºåœ°å€åˆ°ç›®æ ‡åœ°å€çš„路由
                                routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress);
                                if (routers.Count > 0)
                                {
                                    // è®¾ç½®ä»»åŠ¡çŠ¶æ€ä¸ºå‡ºåº“å®Œæˆ
                                    task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish;
                                    // è®¾ç½®å½“前地址为源地址
                                    task.CurrentAddress = item.SourceAddress;
                                    // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€ä¸ºç¬¬ä¸€ä¸ªå­ä½ç½®
                                    task.NextAddress = routers.FirstOrDefault().ChildPosi;
                                }
                            }
                        }
                        var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1");
                        task.TaskState = (int)TaskOutStatusEnum.OutNew;
                        task.CurrentAddress = item.SourceAddress;
                        task.NextAddress = station.stationChildCode;
                        task.Floor = "1F";
                        task.AGVSign = "";
                    }
                    // åˆ¤æ–­ä»»åŠ¡ç±»åž‹æ˜¯å¦ä¸ºå…¥åº“ä»»åŠ¡
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                    {
                        var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1");
                        task.CurrentAddress = string.Empty;
                        if (task.SourceAddress == "1325-6")
                            // è®¾ç½®å½“前地址为"001-021-001"
                            task.CurrentAddress = "001-021-001";
                        else
                            // è®¾ç½®å½“前地址为"002-021-001"
                            task.CurrentAddress = "002-021-001";
                        // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€ä¸ºç›®æ ‡åœ°å€
                        task.NextAddress = item.TargetAddress;
                        task.TaskState = (int)TaskInStatusEnum.InNew;
                        task.CurrentAddress = item.SourceAddress;
                        task.NextAddress = station.stationChildCode;
                        task.Floor = "1F";
                        task.AGVSign= "";
                    }
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                    {
                        task.TaskState = (int)TaskRelocationStatusEnum.RelocationNew;
                        task.CurrentAddress = item.SourceAddress;
                        task.NextAddress = task.TargetAddress;
                        task.Floor = "1F";
                        task.AGVSign = "";
                    }
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.CarryGroup)
                    {
                        var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
                        task.TaskState = (int)TaskAGVCarryStatusEnum.CarryNew;
                        task.CurrentAddress = item.SourceAddress;
                        task.NextAddress = task.TargetAddress;
                        task.Floor = station.stationFloor;
                        task.AGVSign = "";
                    }
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.AcrossFloorGroup)
                    {
                        var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
                        if (station != null)
                        {
                            var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == station.stationFloor);
                            task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
                            task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = next.stationChildCode;
                            task.Floor = station.stationFloor;
                            task.AGVSign = "";
                        }
                    }
                    // å°†è½¬æ¢åŽçš„任务添加到任务列表中
                    tasks.Add(task);
@@ -169,144 +192,7 @@
            return content;
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址查询输送线未执行的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress)
        {
            return BaseDal.QueryFirst(x => ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)) && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址查询输送线未执行的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress, string Barcode)
        {
            return BaseDal.QueryFirst(x => ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)) && x.CurrentAddress == currentAddress && x.PalletCode == Barcode, TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址查询输送线未执行的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryNextConveyorLineTask(string deviceNo, string currentAddress)
        {
            return BaseDal.QueryFirst(x => ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)) && x.NextAddress == currentAddress, TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€å½“前地址查询输送线未执行的任务
        /// </summary>
        /// <param name="Barcode">托盘号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryBarCodeConveyorLineTask(string Barcode, string currentAddress)
        {
            return BaseDal.QueryFirst(x => ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)) && x.CurrentAddress == currentAddress && x.PalletCode == Barcode, TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€ä¸‹ä¸€åœ°å€æŸ¥è¯¢è¾“é€çº¿æ‰§è¡Œä¸­çš„ä»»åŠ¡
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="nextAddress">下一地址</param>
        /// <returns></returns>
        public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€ä¸‹ä¸€åœ°å€æŸ¥è¯¢è¾“é€çº¿æ‰§è¡Œä¸­çš„ä»»åŠ¡
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="Barcode">下一地址</param>
        /// <param name="currentAddress">下一地址</param>
        /// <returns></returns>
        public Dt_Task QueryExecutingCurrentConveyorLineTask(int taskNum, string Barcode, string currentAddress)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.PalletCode == Barcode && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€ä¸‹ä¸€åœ°å€æŸ¥è¯¢è¾“é€çº¿æ‰§è¡Œä¸­çš„ä»»åŠ¡
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="nextAddress">下一地址</param>
        /// <returns></returns>
        public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress, string Barcode)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€ä¸‹ä¸€åœ°å€æŸ¥è¯¢è¾“送线执行中的任务
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="nextAddress">下一地址</param>
        /// <returns></returns>
        public Dt_Task QueryExecutingConveyorLineTask(string nextAddress, string Barcode)
        {
            return BaseDal.QueryFirst(x => (x.NextAddress == nextAddress || x.TargetAddress == nextAddress) && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€å½“å‰åœ°å€æŸ¥è¯¢è¾“é€çº¿å®Œæˆçš„ä»»åŠ¡
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€å½“前地址查询任务
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryBarcodeTask(string barcode, string currentAddress)
        {
            return BaseDal.QueryFirst(x => x.PalletCode == barcode && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€å½“å‰åœ°å€æŸ¥è¯¢è¾“é€çº¿æ–°å»ºçš„ä»»åŠ¡
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryCraneConveyorLineTask(int taskNum, string currentAddress)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.InNew || x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、任务类型分组(可选)按照优先级以及创建时间排序查询任务池新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="taskTypeGroup">任务类型分组(可选)</param>
        /// <returns></returns>
        public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null)
        {
            if (taskTypeGroup == null)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew)), TaskOrderBy);
            if (taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
            if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
            return null;
        }
        #region å †åž›æœºä»»åŠ¡æŸ¥è¯¢
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池新增的任务
@@ -365,16 +251,32 @@
                return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        #endregion
        #region AGV请求设备信号任务查询
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
        /// è¯·æ±‚输送线
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象集合,可能为null</returns>
        public List<Dt_Task> QueryStackerCraneOutTasks(string deviceNo, List<string> outStationCodes)
        /// <param name="deviceNo"></param>
        /// <param name="agvSign"></param>
        /// <returns></returns>
        public Dt_Task QueryRequestConveyorLineSignalTask()
        {
            return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && outStationCodes.Contains(x.CurrentAddress), TaskOrderBy);
            return BaseDal.QueryFirst(x => (x.AGVSign == "RequestPickUp" || x.AGVSign == "RequestPut")&&((TaskInboundTypes.Contains(x.TaskType) && x.TaskState > (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState > (int)TaskOutStatusEnum.SC_OutFinish)));
        }
        /// <summary>
        /// è¯·æ±‚提升机
        /// </summary>
        /// <returns></returns>
        public Dt_Task QueryRequestTSJSignalTask()
        {
            return BaseDal.QueryFirst(x => TaskAcrossFloorboundTypes.Contains(x.TaskType) && x.TaskState > (int)TaskAcrossFloorStatusEnum.CarryNew && (x.AGVSign == "RequestPickUp" || x.AGVSign == "RequestPut"));
        }
        #endregion
        /// <summary>
        /// æ›´æ–°ä»»åŠ¡å¼‚å¸¸ä¿¡æ¯æ˜¾ç¤º
@@ -411,19 +313,6 @@
            return content;
        }
        /// <summary>
        /// æ›´æ–°ä»»åŠ¡çŠ¶æ€ä¿¡æ¯ï¼Œå¹¶åŒæ­¥è‡³WMS
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="status">任务状态</param>
        public void UpdateTaskStatus(int taskNum, int status)
        {
            var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
            if (task == null) return;
            task.TaskState = status;
            task.ModifyDate = DateTime.Now;
            BaseDal.UpdateData(task);
        }
        /// <summary>
        /// å°†ä»»åŠ¡çŠ¶æ€ä¿®æ”¹ä¸ºä¸‹ä¸€ä¸ªçŠ¶æ€
@@ -462,7 +351,7 @@
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskOutStatusEnum.Line_OutFinish)
                    if (task.TaskState == (int)TaskOutStatusEnum.AGV_OutFinish)
                    {
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
@@ -485,55 +374,56 @@
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                    {
                        #region å…¥åº“调用接口获取货位地址
                    //if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                    //{
                    //    #region å…¥åº“调用接口获取货位地址
                        // TODO: è°ƒç”¨æŽ¥å£èŽ·å–è´§ä½åœ°å€
                        // åˆ›å»ºè¯·æ±‚对象
                        var taskDto = new RequestTaskDto()
                        {
                            Position = task.NextAddress,
                            PalletCode = task.PalletCode,
                        };
                    //    // TODO: è°ƒç”¨æŽ¥å£èŽ·å–è´§ä½åœ°å€
                    //    // åˆ›å»ºè¯·æ±‚对象
                    //    var taskDto = new RequestTaskDto()
                    //    {
                    //        Position = task.NextAddress,
                    //        PalletCode = task.PalletCode,
                    //    };
                        // èŽ·å–WMSip地址
                        var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                        var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
                        var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.RequestLocation).FirstOrDefault()?.ConfigValue;
                        if (wmsBasez == null || requestLocation == null)
                        {
                            throw new InvalidOperationException("WMS IP æœªé…ç½®");
                        }
                        var wmsIpAddrss = wmsBasez + requestLocation;
                    //    // èŽ·å–WMSip地址
                    //    var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                    //    var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
                    //    var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.RequestLocation).FirstOrDefault()?.ConfigValue;
                    //    if (wmsBasez == null || requestLocation == null)
                    //    {
                    //        throw new InvalidOperationException("WMS IP æœªé…ç½®");
                    //    }
                    //    var wmsIpAddrss = wmsBasez + requestLocation;
                        // å‘送请求并等待响应
                        var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
                        if (abc == null)
                            return content.Error();
                        // ååºåˆ—化响应内容
                        content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
                    //    // å‘送请求并等待响应
                    //    var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
                    //    if (abc == null)
                    //        return content.Error();
                    //    // ååºåˆ—化响应内容
                    //    content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
                        QuartzLogger.WriteLogToFile($"Info_获取货位", $"获取货位,任务号:【{task.TaskNum}】,托盘号:【{task.PalletCode}】返回参数【{JsonConvert.SerializeObject(content)}】{Environment.NewLine}{Environment.NewLine}");
                    //    QuartzLogger.WriteLogToFile($"Info_获取货位", $"获取货位,任务号:【{task.TaskNum}】,托盘号:【{task.PalletCode}】返回参数【{JsonConvert.SerializeObject(content)}】{Environment.NewLine}{Environment.NewLine}");
                        // æ£€æŸ¥çŠ¶æ€å¹¶è¿”å›ž
                        if (!content.Status)
                        {
                            return content;
                        }
                    //    // æ£€æŸ¥çŠ¶æ€å¹¶è¿”å›ž
                    //    if (!content.Status)
                    //    {
                    //        return content;
                    //    }
                        // ååºåˆ—化任务数据
                        var taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                    //    // ååºåˆ—化任务数据
                    //    var taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = taskResult.TargetAddress;
                        task.TargetAddress = task.NextAddress;
                    //    task.CurrentAddress = task.NextAddress;
                    //    task.NextAddress = taskResult.TargetAddress;
                    //    task.TargetAddress = task.NextAddress;
                        #endregion å…¥åº“调用接口获取货位地址
                    }
                    else if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish)
                    //    #endregion å…¥åº“调用接口获取货位地址
                    //}
                    //else
                    if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish)
                    {
                        if (App.User.UserId > 0)
                        {
@@ -541,6 +431,23 @@
                            return content;
                        }
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                        task_Hty.TaskId = 0;
                        BaseDal.DeleteData(task);
                        _taskHtyRepository.AddData(task_Hty);
                    }
                }else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.CarryGroup)
                {
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskAGVCarryStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskAGVCarryStatusEnum.AGV_CarryFinish)
                    {
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
@@ -594,41 +501,6 @@
        }
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€å½“å‰åœ°å€æ›´æ–°ä»»åŠ¡ä½ç½®ä¿¡æ¯
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task? UpdatePosition(int taskNum, string currentAddress)
        {
            try
            {
                var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress);
                if (task == null) throw new Exception($"未找到该任务信息,任务号:【{taskNum}】");
                string oldCurrentPos = task.CurrentAddress;
                string oldNextPos = task.NextAddress;
                var routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
                if (!routers.Any()) throw new Exception($"未找到设备路由信息");
                task.CurrentAddress = task.NextAddress;
                task.NextAddress = routers.FirstOrDefault().ChildPosi;
                task.ModifyDate = DateTime.Now;
                task.Modifier = "System";
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"系统自动流程,更新当前位置【{oldCurrentPos} ----> {task.CurrentAddress}】和下一位置【{oldNextPos} ----> {task.NextAddress}】");
                return task;
            }
            catch (Exception ex)
            {
            }
            return null;
        }
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
        /// </summary>
        /// <param name="taskNum">任务编号</param>
@@ -643,78 +515,37 @@
                #region WMS同步任务完成
                var keys = new Dictionary<string, object>()
                {
                    {"taskNum", taskNum}
                };
                // èŽ·å–WMSip地址
                var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                var completeTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
                if (wmsBase == null || completeTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddress = wmsBase + completeTask;
                //var keys = new Dictionary<string, object>()
                //{
                //    {"taskNum", taskNum}
                //};
                //// èŽ·å–WMSip地址
                //var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                //var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                //var completeTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
                //if (wmsBase == null || completeTask == null)
                //{
                //    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                //}
                //var wmsIpAddress = wmsBase + completeTask;
                var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result;
                //var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result;
                QuartzLogger.WriteLogToFile($"Info_任务完成", $"任务完成,任务号:【{taskNum}】返回参数【{JsonConvert.SerializeObject(result)}】{Environment.NewLine}{Environment.NewLine}");
                if (result != null)
                {
                    content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                    if (!content.Data.IsNullOrEmpty())
                    {
                        if (content.Data.ToString() == "NG")
                        {
                            task.Remark = "NG";
                            //BaseDal.UpdateData(task);
                            //_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成,MOM返回NG");
                        }
                    }
                    task.ExceptionMessage += "   " + content.Message;
                }
                #endregion WMS同步任务完成
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                {
                    if (!task.Roadway.Contains("GW") && task.TaskType != (int)TaskOutboundTypeEnum.InToOut)
                    {
                        var routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
                        if (!routers.Any()) return WebResponseContent.Instance.Error($"未找到设备路由信息");
                    var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    task.TaskState = nextStatus;
                        int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                        task.TaskState = nextStatus;
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
                        BaseDal.UpdateData(task);
                    task.CurrentAddress = task.NextAddress;
                    task.NextAddress = task.TargetAddress;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.UpdateData(task);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    }
                    else
                    {
                        task.TaskState = (int)TaskOutStatusEnum.OutFinish;
                        //如高温出库后 NG åˆ™å°†ä»»åŠ¡æ ‡è®°ä¸ºNG å¹¶åœ¨å‡ºåº“申请后将任务出至NG口
                        if (task.Remark == "NG")
                        {
                            BaseDal.UpdateData(task);
                        }
                        else
                        {
                            BaseDal.DeleteData(task);
                            ConsoleHelper.WriteWarningLine($"高温出库目的地址{task.TargetAddress}");
                        }
                        var taskHty = task.Adapt<Dt_Task_Hty>();
                        _taskHtyRepository.AddData(taskHty);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    }
                    //暂不考虑多个出库口
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                {
@@ -733,7 +564,17 @@
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    //todo è°ƒç”¨WMS移库完成
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskRelocationStatusEnum>();
                    task.TaskState = nextStatus;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                    task_Hty.TaskId = 0;
                    BaseDal.DeleteData(task);
                    _taskHtyRepository.AddData(task_Hty);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库完成");
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
                {
@@ -846,15 +687,7 @@
        {
            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.TaskType == (int)TaskRelocationTypeEnum.Relocation && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew);
        }
        public Dt_Task QueryOutFireAlarmTask(string deviceNo)
        {
            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.TaskType == (int)TaskOutboundTypeEnum.OutFireAlarm && x.TaskState == (int)TaskOutStatusEnum.OutNew);
        }
        public Dt_Task QueryExecutingTaskByBarcode(string barcode, string nextAddress)
        {
            return BaseDal.QueryFirst(x => x.PalletCode == barcode && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
        }
        private string GetIpAddress(string baseIp, string name)
        {