1
刘磊
2026-03-05 f45293a0c3c9838567d6ff01eae53157a9ed5284
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -40,7 +40,7 @@
        private readonly IRouterRepository _routerRepository;
        private readonly ITask_HtyRepository _taskHtyRepository;
        private readonly IDt_needBarcodeRepository _taskNeedBarcodeRepository;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
        {
@@ -95,6 +95,8 @@
                    // è®¾ç½®ä»»åŠ¡çš„åˆ›å»ºè€…ä¸º"WMS"
                    task.Creater = "WMS";
                    task.CarType = item.CarType;
                    task.PVI = item.PVI;
                    task.NextAddress = item.NextAddress;
                    // åˆ¤æ–­ä»»åŠ¡ç±»åž‹æ˜¯å¦ä¸ºå‡ºåº“ä»»åŠ¡
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
@@ -105,18 +107,11 @@
                        {
                            // è®¾ç½®ä»»åŠ¡çŠ¶æ€ä¸ºå‡ºåº“æ–°å»º
                            task.TaskState =(int)TaskOutStatusEnum.OutNew;
                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
                            // è®¾ç½®å½“前地址为源地址
                            task.CurrentAddress = item.SourceAddress;
                            // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€ä¸ºç¬¬ä¸€ä¸ªå­ä½ç½®
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                            if (item.SourceAddress == "2009")
                            {
                                task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish;
                                // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€ä¸ºç¬¬ä¸€ä¸ªå­ä½ç½®
                                task.NextAddress = "2015";
                            }
                            //task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                        else
                        {
@@ -146,7 +141,7 @@
                            // è®¾ç½®å½“前地址为源地址
                            task.CurrentAddress = item.SourceAddress;
                            // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€ä¸ºç¬¬ä¸€ä¸ªå­ä½ç½®
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                            //task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                    }
                    // å°†è½¬æ¢åŽçš„任务添加到任务列表中
@@ -402,6 +397,39 @@
        }
        /// <summary>
        /// æ¨ªç§»æœºå–车首车判定
        /// </summary>
        /// <param name="taskNum">任务号</param>
        public WebResponseContent TCSendTask([NotNull] Dt_Task task, string Position)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                // èŽ·å–WMSip地址
                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.TCGetCarPass)?.ConfigValue;
                if (wmsBase == null || updateTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddress = wmsBase + updateTask;
                var result = HttpHelper.PostAsync(wmsIpAddress, new { PVI = task.PVI, Position = Position }.ToJsonString()).Result;
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                if (!content.Status) throw new Exception("");
                return content.OK();
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// å°†ä»»åŠ¡çŠ¶æ€ä¿®æ”¹ä¸ºä¸‹ä¸€ä¸ªçŠ¶æ€
        /// </summary>
        /// <param name="task">任务实体对象</param>
@@ -425,7 +453,8 @@
                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                        task_Hty.TaskId = 0;
                        //task_Hty.CarType = task.CarType;
                        task_Hty.PVI = task.PVI;
                        BaseDal.DeleteData(task);
                        _taskHtyRepository.AddData(task_Hty);
                    }
@@ -445,7 +474,7 @@
                    {
                        #region å…¥åº“调用接口获取货位地址
                        // TODO: è°ƒç”¨æŽ¥å£èŽ·å–è´§ä½åœ°å€
                        // è°ƒç”¨æŽ¥å£èŽ·å–è´§ä½åœ°å€
                        // åˆ›å»ºè¯·æ±‚对象
                        var taskDto = new RequestTaskDto()
                        {
@@ -496,6 +525,7 @@
                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                        task_Hty.TaskId = 0;
                        task_Hty.PVI = task.PVI;
                        BaseDal.DeleteData(task);
                        _taskHtyRepository.AddData(task_Hty);
@@ -548,7 +578,7 @@
                #endregion æ›´æ–°ä»»åŠ¡çŠ¶æ€
                content = WebResponseContent.Instance.OK();
                //content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
@@ -597,7 +627,7 @@
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent StackCraneTaskCompleted(int taskNum)
        public WebResponseContent StackCraneTaskCompleted(int taskNum, bool rfiderror = false)
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -822,222 +852,5 @@
        #endregion é‡å†™æ–¹æ³•
        //===========================车轴上料=====================
        public WebResponseContent GetFeedbackAxleloading()
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                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.RequestAxleloading)?.ConfigValue;
                if (wmsBase == null || completeTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddress = wmsBase + completeTask;
                var taskDto = new RequestTaskDto()
                {
                    PalletCode = "1",
                };
                var result = HttpHelper.PostAsync(wmsIpAddress,taskDto.ToJsonString()).Result;
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                return content;
            }
            catch (Exception ex)
            {
                return content.Error($"{ex.Message}");
            }
        }
        public WebResponseContent UpdateAxleCurrentStatue(string CZTM)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                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.UpdateAxleCurrentStatue)?.ConfigValue;
                if (wmsBase == null || completeTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddress = wmsBase + completeTask;
                var keys = new Dictionary<string, object>()
                {
                    {"CZTM", CZTM}
                };
                var taskDto = new RequestTaskDto()
                {
                    PalletCode = CZTM,
                };
                var result = HttpHelper.PostAsync(wmsIpAddress, taskDto.ToJsonString()).Result;
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                return content;
            }
            catch (Exception ex)
            {
                return content.Error($"{ex.Message}");
            }
        }
        //读取申请,给agv下发任务
        public WebResponseContent GetAGVTaskdistribution(string TargetAddress)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                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.genAgvSchedulingTask)?.ConfigValue;
                if (wmsBase == null || completeTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddress = wmsBase + completeTask;
                var taskDto = new RequestTaskDto()
                {
                    RequestType = "999",
                    Position = TargetAddress,
                };
                var result = HttpHelper.PostAsync(wmsIpAddress, taskDto.ToJsonString()).Result;
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                return content;
            }
            catch (Exception ex)
            {
                return content.Error($"{ex.Message}");
            }
        }
        public WebResponseContent SetPlcResponState(string TargetAddress)
        {
            try
            {
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1000");
                CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                DeviceProDTO? deviceProDTOt = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == TargetAddress && x.DeviceProParamName == "ResponState");
                if (conveyorLine.Communicator.Write(deviceProDTOt.DeviceProAddress, (short)2))
                {
                    Console.Out.WriteLine("成功!写出车轴线末端agv取货完成信号:2");
                    return WebResponseContent.Instance.OK();
                }
                else
                {
                    bool st= conveyorLine.Communicator.Write(deviceProDTOt.DeviceProAddress, (short)3);
                    Console.Out.WriteLine($"写出车轴线末端agv取货完成信号失败信息,写入:3,是否成功:{st}");
                    return WebResponseContent.Instance.Error();
                }
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine($"写出车轴线末端agv取货完成信号失败信息,故障信息:{ex.Message}");
                return WebResponseContent.Instance.Error();
            }
        }
        public WebResponseContent GetPlcState(string TargetAddress)
        {
            Dt_StationManager dt_Station=_stationManagerRepository.QueryFirst(x => x.stationLocation == TargetAddress);
            if(dt_Station == null)
                return WebResponseContent.Instance.Error("未找到压装位信息!");
            if(dt_Station.stationStatus=="0")
                return WebResponseContent.Instance.Error("该压装位已被禁用!不可生成agv任务");
            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1000");
            CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
            //DeviceProDTO? devicePr = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == "2033" && x.DeviceProParamName == "ConveyorLineSingal");
            short agv20 = conveyorLine.Communicator.Read<short>("DB5.794");
            if (agv20 != 1)    //获取下轴处是否有料占用
            {
                return WebResponseContent.Instance.Error($"未检测到agv取料站台有货,不可下发任务,读取到:{agv20}");
            }
            DeviceProDTO? deviceProDTOt = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == TargetAddress && x.DeviceProParamName == "ConveyorLineSingal");
            DeviceProDTO? deviceProDTOt2 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == TargetAddress && x.DeviceProParamName == "ResponState");
            if (conveyorLine.Communicator.Read<short>(deviceProDTOt.DeviceProAddress)==1)
            {
                conveyorLine.Communicator.Write(deviceProDTOt2.DeviceProAddress,(short)1);
                return WebResponseContent.Instance.OK();
            }
            else
            {
                conveyorLine.Communicator.Write(deviceProDTOt2.DeviceProAddress, (short)2);
                return WebResponseContent.Instance.Error("读取到压装位信号反馈不可放货!不可生成agv任务");
            }
        }
        public WebResponseContent SetPlcPalletCode(SaveModel saveModel)
        {
            WebResponseContent webResponse = new WebResponseContent();
            try
            {
                if (saveModel.DelKeys.Count != 2)
                {
                    return webResponse.Error("wcs传参错误!");
                }
                string AddStitic = saveModel.DelKeys[0].ToString();
                if (AddStitic == "") return webResponse.Error("选择的站台为空,请选择选择站台!");
                string PalletCode = saveModel.DelKeys[1].ToString();
                if (PalletCode == "") return webResponse.Error("输入的条码为空,请输入条码信息!");
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1000");
                CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                bool setplc = false;
                switch (AddStitic)
                {
                    case "1010":
                        setplc = conveyorLine.Communicator.Write("DB5.914", (string)PalletCode);
                        break;
                    case "2015":
                        setplc = conveyorLine.Communicator.Write("DB5.434", (string)PalletCode);
                        break;
                    case "2017":
                        setplc = conveyorLine.Communicator.Write("DB5.554", (string)PalletCode);
                        break;
                    case "2021":
                        setplc = conveyorLine.Communicator.Write("DB5.794", (string)PalletCode);
                        break;
                }
                if (setplc)
                {
                    return webResponse.OK($"对{AddStitic}站台写入条码:{PalletCode},成功");
                }
                else
                {
                    return webResponse.Error($"对{AddStitic}站台写入条码:{PalletCode},失败");
                }
            }
            catch (Exception ex)
            {
                return webResponse.Error($"错误信息:{ex.Message}");
                throw;
            }
        }
    }
}