From c6e8b600398de38b6684f5fa1eaaaade8562859b Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期六, 20 九月 2025 15:16:56 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhiHuiQiCe/LongDeLiLiKu

---
 项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs |  532 ++++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 396 insertions(+), 136 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
index d8d1275..104266a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
@@ -1,17 +1,27 @@
 锘縰sing Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using System.Text;
 using WIDESEA_DTO.Agv;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.Enums;
 using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.LogHelper;
+using WIDESEAWCS_DTO.Agv;
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Repository;
 using WIDESEAWCS_Tasks;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
+using WIDESEAWCS_Tasks.DBNames;
+using WIDESEAWCS_Tasks.StackPlateJob;
+using static Dm.net.buffer.ByteArrayBuffer;
 
 namespace WIDESEAWCS_Server.Controllers
 {
@@ -22,12 +32,14 @@
         private readonly IStationMangerRepository _stationMangerRepository;
         private readonly ITaskService _taskService;
         private readonly ITaskRepository _taskRepository;
+        private readonly IRouterRepository _routerRepository;
 
-        public AGVController(IStationMangerRepository stationMangerRepository, ITaskService taskService, ITaskRepository taskRepository)
+        public AGVController(IStationMangerRepository stationMangerRepository, ITaskService taskService, ITaskRepository taskRepository,IRouterRepository routerRepository)
         {
             _stationMangerRepository = stationMangerRepository;
             _taskService = taskService;
             _taskRepository = taskRepository;
+            _routerRepository = routerRepository;
         }
 
         
@@ -38,42 +50,170 @@
         /// <param name="secureApplyModel"></param>
         /// <returns></returns>
         [HttpPost, HttpGet, Route("AgvSecureApply"), AllowAnonymous]
-        public AgvResponseContent AgvSecureApply([FromBody] AgvSecureApplyDTO secureApplyModel)
+        public AgvResponse AgvSecureApply([FromBody] AgvSecureApplyDTO secureApplyModel)
         {
-            AgvResponseContent agvResponseContent = new AgvResponseContent();
-            agvResponseContent.ReqCode = secureApplyModel.ReqCode;
+            AgvResponse agvResponse = new AgvResponse();
             try
             {
-                var task = _taskRepository.QueryFirst(x => secureApplyModel.TaskCode == x.AgvTaskNum);
-                if (task == null) throw new Exception("鏈壘鍒颁换鍔�");
-                if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
+                if (secureApplyModel.ReceiveTaskID=="100")
                 {
-                    var content = TakeRequest(task.CurrentAddress);
-                    //if (!content.Status)
-                    //{
-                    //    throw new Exception(content.Message);
-                    //}
+                    return agvResponse.OK("鎴愬姛", "0");
+                }
+                var task = _taskRepository.QueryFirst(x => secureApplyModel.ReceiveTaskID.ObjToInt() == x.TaskNum);
+                if (task == null) throw new Exception("鏈壘鍒颁换鍔�");
+                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+                {
+                    if (task.TaskState==TaskStatusEnum.AGV_Executing.ObjToInt())//鍑哄簱鍙栬揣璇锋眰
+                    {
+                        var content = TakeRequest(secureApplyModel.WbCode);
+                        if (!content.Status)
+                        {
+                            throw new Exception(content.Message);
+                        }
+                    }
+                    else//鍑哄簱鏀捐揣璇锋眰
+                    {
+                        var content = PutRequest(task.NextAddress, task.PalletType);
+                        if (!content.Status)
+                        {
+                            throw new Exception(content.Message);
+                        }
+                    }
                 }
                 else
                 {
-                    var content = PutRequest(task.NextAddress, task.PalletType);
-                    //if (!content.Status)
-                    //{
-                    //    throw new Exception(content.Message);
-                    //}
+                    if (task.TaskState == TaskStatusEnum.AGV_Executing.ObjToInt())//鍏ュ簱鍙栬揣璇锋眰
+                    {
+                        var content = TakeRequest(secureApplyModel.WbCode);
+                        if (!content.Status)
+                        {
+                            throw new Exception(content.Message);
+                        }
+                    }
+                    else//鍏ュ簱鏀捐揣璇锋眰
+                    {
+                        var content = PutRequest(task.NextAddress, task.TaskNum);
+                        if (!content.Status)
+                        {
+                            throw new Exception(content.Message);
+                        }
+                    }
                 }
-                task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt();
-                var up = _taskRepository.UpdateData(task);
-                agvResponseContent.Code = up ? "0" : "1";
-                agvResponseContent.Message = up ? "鎴愬姛" : "澶辫触";
+                agvResponse.OK("鎴愬姛","0");
             }
             catch (Exception ex)
             {
-                agvResponseContent.Code = "1";
-                agvResponseContent.Message = ex.Message;
+                agvResponse.Error(ex.Message);
             }
-            return agvResponseContent;
-            //return _taskService.AgvSecureApply(secureApplyModel);
+            return agvResponse;
+        }
+        /// <summary>
+        /// 鎻愬崌鏈虹敵璇� AGV-WCS
+        /// </summary>
+        /// <param name="secureApplyModel"></param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("AgvHoisterApply"), AllowAnonymous]
+        public AgvResponse AgvHoisterApply([FromBody] AgvHoisterApplyDTO agvHoisterApplyDTO)
+        {
+            AgvResponse agvResponse = new AgvResponse();
+            try
+            {
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == agvHoisterApplyDTO.HoisterCode);
+                if (device == null)
+                {
+                    return agvResponse.Error($"鏈壘鍒板搴旇澶噞agvHoisterApplyDTO.HoisterCode}");
+                }
+                OtherDevice otherDevice = (OtherDevice)device;
+                //鑾峰彇璁惧鍗忚
+                DeviceProDTO? deviceProRead = otherDevice.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(R_HoisterDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                DeviceProDTO? deviceProWrite = otherDevice.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(W_HoisterDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                if (deviceProRead == null || deviceProWrite == null)
+                {
+                    return agvResponse.Error($"鏈壘鍒拌澶噞device.DeviceCode}鍗忚");
+                }
+                //鑾峰彇璇诲彇鍜屽啓鍏�
+                R_HoisterInfo r_HoisterInfo = otherDevice.Communicator.ReadCustomer<R_HoisterInfo>(deviceProRead.DeviceProAddress);
+                W_HoisterInfo w_HoisterInfo = otherDevice.Communicator.ReadCustomer<W_HoisterInfo>(deviceProWrite.DeviceProAddress);
+                if (r_HoisterInfo == null || w_HoisterInfo == null)
+                {
+                    return agvResponse.Error($"鏈鍙栧埌璁惧{device.DeviceCode}淇″彿");
+                }
+                if (r_HoisterInfo.R_HoisterSysStatus!=3)
+                {
+                    return agvResponse.Error($"璁惧鐘舵�佷笉涓鸿嚜鍔�");
+                }
+                QuartzLogger.WriteLogToFile("Info_" + device.DeviceCode, $"r_HoisterInfo:{r_HoisterInfo.Serialize()}{Environment.NewLine}w_HoisterInfo:{w_HoisterInfo.Serialize()}{Environment.NewLine}");
+                bool IsSuccess = false;
+                switch (agvHoisterApplyDTO.Request)
+                {
+                    case "1":
+                        //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪褰撳墠灞� 濡傛灉褰撳墠灞傦紝鍏抽棬鐘舵�侊紝鏃犺揣寰呭懡鐩存帴鍐欏叆寮�闂ㄤ俊鍙�
+                        if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 2)
+                        {
+                            otherDevice.SetValue(W_HoisterDB.W_HoisterDoorStatus, 1);
+                            IsSuccess = true;
+                        }
+                        else if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 1)
+                        {
+                            IsSuccess = true;
+                        }
+                        else if (r_HoisterInfo.R_HoisterCurrent != agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 1)
+                        {
+                            otherDevice.SetValue(W_HoisterDB.W_HoisterDoorStatus, 2);
+                        }
+                        //鍒ゆ柇鎻愬崌鏈轰笉鍦ㄥ綋鍓嶅眰 濡傛灉涓嶅湪褰撳墠灞傦紝鍏抽棬鐘舵�侊紝鏃犺揣寰呭懡鐩存帴鍐欏叆绉诲姩寮�闂ㄤ俊鍙�(褰撳墠)
+                        else if (r_HoisterInfo.R_HoisterCurrent != agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 2)
+                        {
+                            otherDevice.SetValue(W_HoisterDB.W_HoisterTarget, agvHoisterApplyDTO.CurrentLayer);
+                            otherDevice.SetValue(W_HoisterDB.W_HoisterTask, 99);
+                        }
+                        return IsSuccess ? agvResponse.OK($"璇锋眰{agvHoisterApplyDTO.Request}鎴愬姛,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}","1"): agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}");
+                    case "2":
+                        //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪褰撳墠灞� 濡傛灉褰撳墠灞傦紝寮�闂ㄧ姸鎬侊紝鏃犺揣寰呭懡 鏀捐
+                        if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 1)
+                        {
+                            IsSuccess = true;
+                        }
+                        return IsSuccess ? agvResponse.OK($"璇锋眰{agvHoisterApplyDTO.Request}鎴愬姛,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}", "2") : agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}");
+                    case "3":
+                        //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪褰撳墠灞� 濡傛灉褰撳墠灞傦紝寮�闂ㄧ姸鎬侊紝鏈夎揣寰呭懡鍐欏叆鍏抽棬淇″彿
+                        if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 1 && r_HoisterInfo.R_HoisterDoorStatus == 1 && w_HoisterInfo.W_HoisterDoorStatus!=2)
+                        {
+                            otherDevice.SetValue(W_HoisterDB.W_HoisterDoorStatus, 2);
+                        }
+                        //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪褰撳墠灞� 濡傛灉褰撳墠灞傦紝鍏抽棬鐘舵�侊紝鏈夎揣寰呭懡鍐欏叆绉诲姩寮�闂ㄤ俊鍙�(鐩殑)
+                        if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 1 && r_HoisterInfo.R_HoisterDoorStatus == 2)
+                        {
+                            otherDevice.SetValue(W_HoisterDB.W_HoisterTarget, agvHoisterApplyDTO.TargetLayer);
+                            otherDevice.SetValue(W_HoisterDB.W_HoisterDoorStatus, 1);
+                            otherDevice.SetValue(W_HoisterDB.W_HoisterTask, 99);
+                            IsSuccess = true;
+                        }
+                        return IsSuccess ? agvResponse.OK($"璇锋眰{agvHoisterApplyDTO.Request}鎴愬姛,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}", "3") : agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}");
+                    case "4":
+                        //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪鐩殑灞� 濡傛灉鐩殑灞傦紝寮�闂ㄧ姸鎬侊紝鏈夎揣寰呭懡 鏀捐
+                        if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.TargetLayer && r_HoisterInfo.R_HoisterLoadStatus == 1 && r_HoisterInfo.R_HoisterDoorStatus == 1)
+                        {
+                            IsSuccess = true;
+                        }
+                        return IsSuccess ? agvResponse.OK($"璇锋眰{agvHoisterApplyDTO.Request}鎴愬姛,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}", "4") : agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}");
+                    case "5":
+                        //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪鐩殑灞� 濡傛灉鐩殑灞傦紝寮�闂ㄧ姸鎬侊紝鏃犺揣寰呭懡鍐欏叆鍏抽棬淇″彿
+                        if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.TargetLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 1)
+                        {
+                            otherDevice.SetValue(W_HoisterDB.W_HoisterDoorStatus, 2);
+                            IsSuccess = true;
+                        }
+                        return IsSuccess ? agvResponse.OK($"璇锋眰{agvHoisterApplyDTO.Request}鎴愬姛,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}", "5") : agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}");
+                    default:
+                        return agvResponse.Error($"鏈壘鍒板搴旇姹�,Request:{agvHoisterApplyDTO.Request}");
+                }
+            }
+            catch (Exception ex)
+            {
+                agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,閿欒{ex.Message},浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}");
+            }
+            return agvResponse;
         }
         /// <summary>
         /// AGV浠诲姟鏇存柊/瀹屾垚
@@ -81,87 +221,91 @@
         /// <param name="agvUpdateModel"></param>
         /// <returns></returns>
         [HttpPost, HttpGet, Route("AgvCallback"), AllowAnonymous]
-        public AgvResponseContent AgvUpdateTask([FromBody] AgvUpdateDTO agvUpdateModel)
+        public AgvResponse AgvCallback([FromBody] AgvUpdateDTO agvUpdateModel)
         {
-            AgvResponseContent agvResponseContent = new AgvResponseContent();
+            AgvResponse agvResponse = new AgvResponse();
             try
             {
-                if (agvUpdateModel == null) throw new Exception("鏈幏鍙栧埌璇锋眰鍙傛暟");
-                agvResponseContent.ReqCode = agvUpdateModel.ReqCode;
-                var task = _taskRepository.QueryFirst(x => agvUpdateModel.TaskCode == x.AgvTaskNum);
-                if (task == null) throw new Exception($"鏈壘鍒颁换鍔�,浠诲姟鍙枫�恵agvUpdateModel.TaskCode}銆�");
-                switch (agvUpdateModel.Method)
+                var task = _taskRepository.QueryFirst(x => agvUpdateModel.ReceiveTaskID == x.TaskNum.ToString());
+                if (task == null) throw new Exception($"鏈壘鍒颁换鍔�,浠诲姟鍙枫�恵agvUpdateModel.ReceiveTaskID}銆�");
+                switch (agvUpdateModel.GoodsState)
                 {
-                    case "start":
-                        break;
-                    case "outbin"://鍑哄簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鍙栬揣瀹屾垚
-                        if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
+                    case "1"://鍑哄簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鍙栬揣瀹屾垚
+
+                        //鏇存柊浠诲姟鐘舵��
+                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_TakeFinish);
+                        if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                         {
                             var content = TakeFinish(task.CurrentAddress);
-                            if (!content.Status) throw new Exception(content.Message);
-                            task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
-                            var up = _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
-                            _taskService.TaskCompleted(task.TaskNum);
-                            agvResponseContent.Code = up ? "0" : "1";
-                            agvResponseContent.Message = up ? "鎴愬姛" : "澶辫触";
-                            return agvResponseContent;
-                        }
-                        break;
-                    case "getSafetySignal"://瀹夊叏淇″彿鐢宠
-                        {
-                            if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
+                            if (!content.Status) 
                             {
-                                var content = TakeRequest(task.CurrentAddress);
-                                //if (!content.Status) throw new Exception(content.Message);
-                            }
-                            else
-                            {
-                                var content = PutRequest(task.NextAddress, task.PalletType);
-                                //if (!content.Status) throw new Exception(content.Message);
-                            }
-                            task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt();
-                            var up = _taskRepository.UpdateData(task);
-                            agvResponseContent.Code = up ? "0" : "1";
-                            agvResponseContent.Message = up ? "鎴愬姛" : "澶辫触";
-                            return agvResponseContent;
+                                throw new Exception(content.Message);
+                            };
                         }
-                    case "end"://鍏ュ簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鏀捐揣瀹屾垚
-                        if (task.TaskType != TaskTypeEnum.Outbound.ObjToInt())
+                        else
                         {
-                            var content = PutFinish(task.NextAddress);
-                            if (!content.Status) throw new Exception(content.Message);
-                            Dt_StationManger dt_Station = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == task.NextAddress);
+                            if (task.TaskType == TaskTypeEnum.PrintYLInbound.ObjToInt() || task.TaskType == TaskTypeEnum.PrintYLBackInbound.ObjToInt())
+                            {
+                                var content = TakeFinish(task.CurrentAddress);
+                                if (!content.Status)
+                                {
+                                    throw new Exception(content.Message);
+                                };
+                            }
+                        }
+                        return agvResponse.OK("鎴愬姛", "0");
+                    case "2"://鍏ュ簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鏀捐揣瀹屾垚
+                        if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
+                        {
+                            Dt_StationManger dt_Station = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress);
                             if (dt_Station == null)
                             {
                                 throw new Exception($"{task.NextAddress}AGV绔欏彴鏈畾涔�");
                             }
-                            task.CurrentAddress = dt_Station.StationCode;
-                            task.NextAddress = "";
-                            task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
-                            task.DeviceCode = "SC01_CSJ";
-                            var up = _taskRepository.UpdateData(task);
-                            agvResponseContent.Code = up ? "0" : "1";
-                            agvResponseContent.Message = up ? "鎴愬姛" : "澶辫触";
-                            return agvResponseContent;
+                            if (task.TaskType == TaskTypeEnum.PrintYLInbound.ObjToInt() || task.TaskType == TaskTypeEnum.PrintYLBackInbound.ObjToInt())
+                            {
+                                List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.NextAddress == x.StartPosi);
+                                Dt_Router router = routers.FirstOrDefault();
+                                if (router == null)
+                                {
+                                    throw new Exception($"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�");
+                                }
+                                string oldAddress = task.NextAddress;
+                                //鏇存柊浠诲姟鐘舵��
+                                task.CurrentAddress = router.NextPosi;
+                                task.NextAddress = "";
+                                task.DeviceCode = router.ChildPosiDeviceCode;
+                                _taskService.UpdateTask(task, TaskStatusEnum.AGV_Finish);
+                                PutFinish(oldAddress, task.TaskNum);
+                            }
+                            else
+                            {
+                                task.CurrentAddress = dt_Station.StationCode;
+                                task.NextAddress = "";
+                                task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
+                                task.DeviceCode = dt_Station.StationDeviceCode;
+                                _taskRepository.UpdateData(task);
+                            }
+                            return agvResponse.OK("鎴愬姛","0");
                         }
-                        break;
-                    case "cancel":
-                        task.TaskState = TaskStatusEnum.Cancel.ObjToInt();
-                        _taskRepository.UpdateData(task);
-                        break;
+                        else
+                        {
+                            _taskService.TaskCompleted(task.TaskNum);
+                            if (task.TaskType==TaskTypeEnum.PrintYLOutbound.ObjToInt())
+                            {
+                                PutFinish(task.NextAddress);
+                            }
+                            return agvResponse.OK("鎴愬姛", "0");
+                        }
                     default:
-                        throw new Exception($"鏈畾涔夋柟娉曞悕銆恵agvUpdateModel.Method}銆�");
+                        throw new Exception($"鏈畾涔夋柟娉曞悕銆恵agvUpdateModel.TaskState}銆�");
                 }
-                agvResponseContent.Code = "0";
-                agvResponseContent.Message = "鎴愬姛";
             }
             catch (Exception ex)
             {
-                agvResponseContent.Code = "1";
-                agvResponseContent.Message = ex.Message;
+                agvResponse.Error(ex.Message);
             }
-            return agvResponseContent;
-            //return _taskService.AgvUpdateTask(agvUpdateModel);
+            return agvResponse;
         }
 
         /// <summary>
@@ -171,47 +315,96 @@
         /// <param name="palletType"></param>
         /// <returns></returns>
         [HttpPost, HttpGet, Route("PutRequest"), AllowAnonymous]
-        public WebResponseContent PutRequest(string code, int palletType)
+        public WebResponseContent PutRequest(string code, int taskNum)
         {
+            WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == code);
+                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == code);
                 if (stationManger == null)
                 {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃�");
+                    return content.Error($"鏈壘鍒扮珯鍙伴厤缃�");
                 }
                 IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
                 if (device == null)
                 {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇澶�");
+                    return content.Error($"鏈壘鍒板搴旇澶�");
                 }
-
-                OtherDevice otherDevice = (OtherDevice)device;
-
-                bool canPut = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, stationManger.StationCode);
-                if (canPut)
+                if (device.DeviceCode.Contains("Plate"))
                 {
-                    otherDevice.SetValue(GroundStationDBName.W_PutRequest, true, stationManger.StationCode);
-                    return WebResponseContent.Instance.OK();
-                }
-                else
-                {
-                    otherDevice.SetValue(GroundStationDBName.W_PutRequest, true, stationManger.StationCode);
-                    Thread.Sleep(1000);
-                    canPut = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, stationManger.StationCode);
-                    if (canPut)
+                    CommonConveyorLine commonConveyorLine = (CommonConveyorLine)device;
+                    StackPlateTaskCommandCommand command = commonConveyorLine.ReadCustomer<StackPlateTaskCommandCommand>(device.DeviceCode);
+
+                    if (command != null && command.State == 2 && command.InteractiveSignal == 1)
                     {
-                        return WebResponseContent.Instance.OK();
+                        return content.OK("鍏佽鏀炬枡");
                     }
                     else
                     {
-                        return WebResponseContent.Instance.Error($"鏀捐揣鐢宠涓�");
+                        return content.Error("绂佹鏀炬枡");
                     }
                 }
+                else
+                {
+
+                    OtherDevice otherDevice = (OtherDevice)device;
+
+                    if (device.DeviceCode.Contains("CP"))//鎴愬搧杈撻�佺嚎
+                    {
+                        short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode);
+                        if (Command == 3)
+                        {
+                            content.OK("鍏佽鏀炬枡");
+                        }
+                        else
+                        {
+                            return content.Error("绂佹鏀炬枡");
+                        }
+                    }
+                    else if (device.DeviceCode.Contains("Coveryor"))//鎺ラ┏鍙�
+                    {
+                        bool RequestPut = otherDevice.GetValue<CoveryorDB, bool>(CoveryorDB.C_RequestPut, stationManger.StationDeviceCode);
+                        if (!RequestPut)
+                        {
+                            otherDevice.SetValue(CoveryorDB.C_InTaskNum, taskNum, stationManger.StationDeviceCode);
+                            otherDevice.SetValue(CoveryorDB.C_RequestPut, true, stationManger.StationDeviceCode);
+                            Thread.Sleep(1000);
+                        }
+                        bool AllowFinish = otherDevice.GetValue<CoveryorDB, bool>(CoveryorDB.C_AllowFinish, stationManger.StationDeviceCode);
+                        if (AllowFinish)
+                        {
+                            content.OK("鍏佽鏀炬枡");
+                        }
+                        else
+                        {
+                            return content.Error("绂佹鏀炬枡");
+                        }
+                    }
+                    else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶
+                    {
+                        bool RequestPut = otherDevice.GetValue<RetractDB, bool>(RetractDB.Ret_RequestPut, stationManger.StationDeviceCode);
+                        if (!RequestPut)
+                        {
+                            otherDevice.SetValue(RetractDB.Ret_TargetAddress, Convert.ToInt16(stationManger.StationCode), stationManger.StationDeviceCode);
+                            otherDevice.SetValue(RetractDB.Ret_RequestPut, true, stationManger.StationDeviceCode);
+                            Thread.Sleep(1000);
+                        }
+                        bool AllowFinish = otherDevice.GetValue<RetractDB, bool>(RetractDB.Ret_AllowFinish, stationManger.StationDeviceCode);
+                        if (AllowFinish)
+                        {
+                            content.OK("鍏佽鏀炬枡");
+                        }
+                        else
+                        {
+                            return content.Error("绂佹鏀炬枡");
+                        }
+                    }
+                }
+                return content;
             }
             catch (Exception ex)
             {
-                return WebResponseContent.Instance.Error(ex.Message);
+                return content.Error(ex.Message);
             }
         }
 
@@ -222,11 +415,11 @@
         /// <param name="code"></param>
         /// <returns></returns>
         [HttpPost, HttpGet, Route("PutFinish"), AllowAnonymous]
-        public WebResponseContent PutFinish(string code)
+        public WebResponseContent PutFinish(string code,int taskNum=0)
         {
             try
             {
-                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == code);
+                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == code);
                 if (stationManger == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃�");
@@ -236,9 +429,24 @@
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇澶�");
                 }
-
-                OtherDevice otherDevice = (OtherDevice)device;
-                otherDevice.SetValue(GroundStationDBName.W_PutFinish, true, stationManger.StationCode);
+                if (device.DeviceCode.Contains("Plate"))
+                {
+                    CommonConveyorLine commonConveyorLine = (CommonConveyorLine)device;
+                    commonConveyorLine.SetValue(StackPlateDBName.WriteInteractiveSignal, Convert.ToInt16(1), device.DeviceCode);
+                    return WebResponseContent.Instance.OK();
+                }
+                else
+                {
+                    OtherDevice otherDevice = (OtherDevice)device;
+                    if (device.DeviceCode.Contains("Coveryor"))//鎺ラ┏鍙�
+                    {
+                        otherDevice.SetValue(CoveryorDB.C_PutFinish, true, stationManger.StationDeviceCode);
+                    }
+                    else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶
+                    {
+                        otherDevice.SetValue(RetractDB.Ret_PutFinish, true, stationManger.StationDeviceCode);
+                    }
+                }
                 return WebResponseContent.Instance.OK();
             }
             catch (Exception ex)
@@ -256,45 +464,79 @@
         [HttpPost, HttpGet, Route("TakeRequest"), AllowAnonymous]
         public WebResponseContent TakeRequest(string code)
         {
+            WebResponseContent content = new WebResponseContent();
             try
             {
                 Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == code);
                 if (stationManger == null)
                 {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃�");
+                    return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃畕code}");
                 }
                 IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
                 if (device == null)
                 {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇澶�");
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇澶噞stationManger.StationDeviceCode}");
                 }
-
-                OtherDevice otherDevice = (OtherDevice)device;
-
-                bool canPut = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanTake, stationManger.StationCode);
-                if (canPut)
+                if (device.DeviceCode.Contains("Plate"))
                 {
-                    otherDevice.SetValue(GroundStationDBName.W_TakeRequest, true, stationManger.StationCode);
-                    return WebResponseContent.Instance.OK();
-                }
-                else
-                {
-                    otherDevice.SetValue(GroundStationDBName.W_TakeRequest, true, stationManger.StationCode);
-                    Thread.Sleep(1000);
-                    canPut = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanTake, stationManger.StationCode);
-                    if (canPut)
+                    CommonConveyorLine commonConveyorLine = (CommonConveyorLine)device;
+                    StackPlateTaskCommandCommand command = commonConveyorLine.ReadCustomer<StackPlateTaskCommandCommand>(device.DeviceCode);
+                    
+                    if (command != null&&command.State == 2 && command.InteractiveSignal == 2)
                     {
-                        return WebResponseContent.Instance.OK();
+                        return content.OK("鍏佽鍙栨枡");
                     }
                     else
                     {
-                        return WebResponseContent.Instance.Error($"鍙栬揣鐢宠涓�");
+                        return content.Error("绂佹鍙栨枡");
                     }
                 }
+                else
+                {
+                    OtherDevice otherDevice = (OtherDevice)device;
+
+                    if (otherDevice.DeviceCode.Contains("CP"))//鎴愬搧杈撻�佺嚎
+                    {
+                        short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode);
+                        if (Command == 2)
+                        {
+                            content.OK("鍏佽鍙栨枡");
+                        }
+                        else
+                        {
+                            return content.Error("绂佹鍙栨枡");
+                        }
+                    }
+                    else if (device.DeviceCode.Contains("Coveryor"))//鎺ラ┏鍙�
+                    {
+                        bool AllowTake = otherDevice.GetValue<CoveryorDB, bool>(CoveryorDB.C_AllowTake, stationManger.StationDeviceCode);
+                        if (AllowTake)
+                        {
+                            content.OK("鍏佽鍙栨枡");
+                        }
+                        else
+                        {
+                            return content.Error("绂佹鍙栨枡");
+                        }
+                    }
+                    else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶
+                    {
+                        bool AllowTake = otherDevice.GetValue<RetractDB, bool>(RetractDB.Ret_AllowTake, stationManger.StationDeviceCode);
+                        if (AllowTake)
+                        {
+                            content.OK("鍏佽鍙栨枡");
+                        }
+                        else
+                        {
+                            return content.Error("绂佹鍙栨枡");
+                        }
+                    }
+                }
+                return content;
             }
             catch (Exception ex)
             {
-                return WebResponseContent.Instance.Error(ex.Message);
+                return content.Error(ex.Message);
             }
         }
 
@@ -309,7 +551,7 @@
         {
             try
             {
-                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == code);
+                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == code);
                 if (stationManger == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃�");
@@ -319,11 +561,29 @@
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇澶�");
                 }
+                if (device.DeviceCode.Contains("Plate"))
+                {
+                    CommonConveyorLine commonConveyorLine = (CommonConveyorLine)device;
+                    commonConveyorLine.SetValue(StackPlateDBName.WriteInteractiveSignal, Convert.ToInt16(2), device.DeviceCode);
+                    return WebResponseContent.Instance.OK();
+                }
+                else
+                {
+                    OtherDevice otherDevice = (OtherDevice)device;
+                    if (device.DeviceCode.Contains("CP"))
+                    {
+                        otherDevice.SetValue(W_ConveyorLineCPDB.W_Command, 2, stationManger.StationCode);
+                    }
+                    else if (device.DeviceCode.Contains("Coveryor"))
+                    {
+                        otherDevice.SetValue(CoveryorDB.C_TakeFinish, true, stationManger.StationDeviceCode);
+                    }
+                    else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶
+                    {
+                        otherDevice.SetValue(RetractDB.Ret_TakeFinish, true, stationManger.StationDeviceCode);
+                    }
+                }
 
-                OtherDevice otherDevice = (OtherDevice)device;
-                otherDevice.SetValue(GroundStationDBName.W_TakeFinish, true, stationManger.StationCode);
-                Thread.Sleep(1000);
-                otherDevice.SetValue(GroundStationDBName.W_TakeFinish, false, stationManger.StationCode);
                 return WebResponseContent.Instance.OK();
             }
             catch (Exception ex)

--
Gitblit v1.9.3