huangxiaoqiang
2025-11-29 f9e8a2d52fe52fb2389892a46c12d4d262ee9aaf
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -3,6 +3,7 @@
using LogLibrary.Log;
using Mapster;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
@@ -123,28 +124,25 @@
                            task.NextAddress = station.stationChildCode;
                            task.Floor = "1F";
                            task.Floor = item.Floor;
                            task.AGVSign = "";
                        }
                        else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.AcrossFloorGroup)
                        {
                            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
                            var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == item.Floor);
                            if (station != null)
                            {
                                var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == station.stationFloor);
                            task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
                                task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
                            task.CurrentAddress = item.SourceAddress;
                                task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = next.stationChildCode;
                                task.NextAddress = next.stationChildCode;
                            task.Floor = item.Floor;
                                task.Floor = station.stationFloor;
                            task.AGVSign = "";
                                task.AGVSign = "";
                            }
                            task.DoubleTray = item.DoubleTray;
                        }
                        else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.CarryGroup)
                        {
@@ -180,22 +178,19 @@
                        }
                        else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.AcrossFloorGroup)
                        {
                            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
                            var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == item.Floor);
                            if (station != null)
                            {
                                var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == station.stationFloor);
                            task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
                                task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
                            task.CurrentAddress = item.SourceAddress;
                                task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = next.stationChildCode;
                                task.NextAddress = next.stationChildCode;
                            task.Floor = item.Floor;
                                task.Floor = station.stationFloor;
                            task.AGVSign = "";
                                task.AGVSign = "";
                            }
                            task.DoubleTray = item.DoubleTray;
                        }
                        else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.CarryGroup)
                        {
@@ -218,7 +213,7 @@
                    {
                        if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.RelocationGroup)
                        {
                            task.TaskState = (int)TaskRelocationStatusEnum.RelocationNew;
                            //task.TaskState = (int)TaskRelocationStatusEnum.RelocationNew;
                            task.CurrentAddress = item.SourceAddress;
@@ -230,26 +225,22 @@
                        }
                        else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.AcrossFloorGroup)
                        {
                            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
                            var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == item.Floor);
                            if (station != null)
                            {
                                var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == station.stationFloor);
                            task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
                                task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
                            task.CurrentAddress = item.SourceAddress;
                                task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = next.stationChildCode;
                                task.NextAddress = next.stationChildCode;
                            task.Floor = item.Floor;
                                task.Floor = station.stationFloor;
                            task.AGVSign = "";
                                task.AGVSign = "";
                            }
                            task.DoubleTray = item.DoubleTray;
                        }
                        else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.CarryGroup)
                        {
                            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
                            task.TaskState = (int)TaskAGVCarryStatusEnum.CarryNew;
@@ -257,7 +248,7 @@
                            task.NextAddress = task.TargetAddress;
                            task.Floor = station.stationFloor;
                            task.Floor = item.Floor;
                            task.AGVSign = "";
                        }
@@ -267,23 +258,19 @@
                    {
                        if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.AcrossFloorGroup)
                        {
                            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
                            var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == item.Floor);
                            if (station != null)
                            {
                                var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == station.stationFloor);
                            task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
                                task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
                            task.CurrentAddress = item.SourceAddress;
                                task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = next.stationChildCode;
                                task.NextAddress = next.stationChildCode;
                            task.Floor = item.Floor;
                                task.Floor = station.stationFloor;
                                task.AGVSign = "";
                            }
                            task.AGVSign = "";
                        }
                    }
                    // å°†è½¬æ¢åŽçš„任务添加到任务列表中
@@ -387,7 +374,7 @@
        /// <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"));
            return BaseDal.QueryFirst(x =>  x.TaskState > (int)TaskAcrossFloorStatusEnum.CarryNew && (x.AGVSign == "RequestPickUp" || x.AGVSign == "RequestPut"));
        }
        #endregion
@@ -483,6 +470,17 @@
                    if (task.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)
                    {
                        content = StackCraneTaskCompleted(task.TaskNum);
                        return content;
                    }
                    if (task.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
                    {
                        string TargetAddress = GetLocation(task.PalletCode);
                        if (TargetAddress == "")
                        {
                            return content.Error($"未获取出库终点货位信息");
                        }
                        task.NextAddress = TargetAddress;
                        task.TargetAddress = TargetAddress;
                    }
                }
@@ -495,45 +493,21 @@
                    {
                        #region å…¥åº“调用接口获取货位地址
                        var taskDto = new RequestTaskDto()
                        string TargetAddress= GetLocation(task.PalletCode);
                        if (TargetAddress == null)
                        {
                            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 æœªé…ç½®");
                            return content.Error($"未获取入库终点货位信息");
                        }
                        var wmsIpAddrss = wmsBasez + requestLocation;
                        // å‘送请求并等待响应
                        var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
                        if (abc == null)
                            return content.Error();
                        // ååºåˆ—化响应内容
                        content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
                        LogFactory.WriteError($"获取货位", $"获取货位,任务号:【{task.TaskNum}】,托盘号:【{task.PalletCode}】返回参数【{JsonConvert.SerializeObject(content)}】");
                        // æ£€æŸ¥çŠ¶æ€å¹¶è¿”å›ž
                        if (!content.Status)
                        {
                            return content;
                        }
                        // ååºåˆ—化任务数据
                        var taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = task.TargetAddress;
                        task.TargetAddress = task.NextAddress;
                        task.NextAddress = TargetAddress;
                        task.TargetAddress = TargetAddress;
                        #endregion å…¥åº“调用接口获取货位地址
                    }
                    else if (task.TaskState == (int)TaskInStatusEnum.Line_InExecuting)
                    {
                        UpdateStartLocationInfo(task);
                    }
                    else if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish)
                    {
@@ -560,6 +534,28 @@
                    if (task.TaskState == (int)TaskAGVCarryStatusEnum.AGV_CarryFinish)
                    {
                        CompletedTask(task.TaskNum);
                        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.TaskState.GetTaskStateGroup() == TaskStateGroup.RelocationGroup)
                {
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskRelocationStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationFinish|| task.TaskState == (int)TaskRelocationStatusEnum.AGV_RelocationFinish)
                    {
                        CompletedTask(task.TaskNum);
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
@@ -593,73 +589,19 @@
                    if (task.TaskState == (int)TaskAcrossFloorStatusEnum.FirstCarryFinish)
                    {
                        Dt_StationManager stationManager = new Dt_StationManager();
                        string TaskTemplate = string.Empty;
                        if (task.Floor == "1F")
                        if (task.DoubleTray != 1)
                        {
                            stationManager = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == "2F");
                            TaskTemplate = "BBB";
                            RequestAcrossFloor(task,0);
                        }
                        else
                        {
                            stationManager = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == "1F");
                            TaskTemplate = "CCC";
                            var taskDouble = BaseDal.QueryFirst(x => x.TaskState == (int)TaskAcrossFloorStatusEnum.FirstCarryFinish);
                            if (taskDouble != null)
                            {
                                RequestAcrossFloor(task,1);
                                RequestAcrossFloor(taskDouble,1);
                            }
                        }
                        var taskDto = new RequestAcrossFloorTaskDto()
                        {
                            NextAddress = task.NextAddress,
                            PalletCode = task.PalletCode,
                            TaskNum = task.TaskNum
                        };
                        // èŽ·å–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.AcrossFloorTask).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);
                        if (!content.Status)
                        {
                            return content;
                        }
                        // ååºåˆ—化任务数据
                        var taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                        Dt_Task taskNew = _mapper.Map<Dt_Task>(taskDTO);
                        task.Creater = "WMS";
                        taskNew.CurrentAddress = stationManager.stationChildCode;
                        taskNew.NextAddress = task.TargetAddress;
                        taskNew.Floor = stationManager.stationFloor;
                        taskNew.AGVSign = "";
                        task.TaskState = (int)TaskAcrossFloorStatusEnum.FirstCarryFinish;
                        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);
                        BaseDal.AddData(taskNew);
                        SendAgvTask(TaskTemplate, taskNew.TaskNum);
                    }
                }
                else
@@ -702,6 +644,120 @@
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        public WebResponseContent RequestAcrossFloor(Dt_Task task,int DoubleTray)
        {
            WebResponseContent content = new WebResponseContent();
            Dt_StationManager stationManager = new Dt_StationManager();
            string TaskTemplate = string.Empty;
            if (task.Floor == "1F")
            {
                stationManager = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == "2F");
                TaskTemplate = "BBB";
            }
            else
            {
                stationManager = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == "1F");
                TaskTemplate = "CCC";
            }
            var taskDto = new RequestAcrossFloorTaskDto()
            {
                NextAddress = task.NextAddress,
                PalletCode = task.PalletCode,
                TaskNum = task.TaskNum
            };
            // èŽ·å–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.AcrossFloorTask).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);
            if (!content.Status)
            {
                return content;
            }
            // ååºåˆ—化任务数据
            var taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
            Dt_Task taskNew = _mapper.Map<Dt_Task>(taskDTO);
            task.Creater = "WMS";
            taskNew.CurrentAddress = stationManager.stationChildCode;
            taskNew.NextAddress = taskDTO.TargetAddress;
            taskNew.Floor = stationManager.stationFloor;
            taskNew.AGVSign = "";
            taskNew.DoubleTray = DoubleTray;
            task.TaskState = (int)TaskAcrossFloorStatusEnum.FirstCarryFinish;
            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);
            BaseDal.AddData(taskNew);
            return SendAgvTask(TaskTemplate, taskNew.TaskNum);
        }
        public string GetLocation(string palletCode)
        {
            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
            var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestLocation)?.ConfigValue;
            if (wmsBase == null || updateTask == null)
            {
                throw new InvalidOperationException("WMS IP æœªé…ç½®");
            }
            var wmsIpAddress = wmsBase + updateTask;
            var keys = new Dictionary<string, object>()
            {
                {"palletCode", palletCode}
            };
            var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result;
            WebResponseContent? content = JsonConvert.DeserializeObject<WebResponseContent>(result);
            if (content.Status)
            {
                return content.Data.ToString();
            }
            else
            {
                return string.Empty;
            }
        }
        public void UpdateStartLocationInfo(Dt_Task task)
        {
            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
            var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.UpdateStartLocationInfo)?.ConfigValue;
            if (wmsBase == null || updateTask == null)
            {
                throw new InvalidOperationException("WMS IP æœªé…ç½®");
            }
            var wmsIpAddress = wmsBase + updateTask;
            var result = HttpHelper.PostAsync(wmsIpAddress, task.ToJsonString()).Result;
        }
        public void CompletedTask(int taskNum)
@@ -751,6 +807,10 @@
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.UpdateData(task);
                    UpdateStartLocationInfo(task);
                    content.OK(data: task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                }
@@ -898,6 +958,11 @@
            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.TaskType == (int)TaskRelocationTypeEnum.Relocation && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew);
        }
        public Dt_Task QueryExecutingTask(string deviceNo)
        {
            return BaseDal.QueryFirst(x => x.Roadway == deviceNo &&( x.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationExecuting || x.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting || x.TaskState == (int)TaskInStatusEnum.SC_InExecuting));
        }
        private string GetIpAddress(string baseIp, string name)
        {