From c2cdf0b95d4c9214646c860609b8c838d6ffa779 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期五, 15 八月 2025 13:42:10 +0800
Subject: [PATCH] AGV,成品库代码更新上传

---
 项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs |  259 ++++++++++++++++++++++++++++++++-------------------
 1 files changed, 162 insertions(+), 97 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..d4daa32 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,23 @@
 锘縰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_Tasks;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
+using WIDESEAWCS_Tasks.DBNames;
 
 namespace WIDESEAWCS_Server.Controllers
 {
@@ -38,42 +44,146 @@
         /// <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);
+                var task = _taskRepository.QueryFirst(x => secureApplyModel.ReceiveTaskID.ObjToInt() == x.TaskNum);
                 if (task == null) throw new Exception("鏈壘鍒颁换鍔�");
                 if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                 {
                     var content = TakeRequest(task.CurrentAddress);
-                    //if (!content.Status)
-                    //{
-                    //    throw new Exception(content.Message);
-                    //}
+                    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 (!content.Status)
+                    {
+                        throw new Exception(content.Message);
+                    }
                 }
-                task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt();
+                task.TaskState = TaskStatusEnum.AGV_Puting.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,56 +191,29 @@
         /// <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://鍑哄簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鍙栬揣瀹屾垚
+                    //    if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
+                    //    {
+                    //        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);
+                    //    }
+                    //    break;
+                    case 2://鍏ュ簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鏀捐揣瀹屾垚
+                        if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                         {
-                            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())
-                            {
-                                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;
-                        }
-                    case "end"://鍏ュ簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鏀捐揣瀹屾垚
-                        if (task.TaskType != TaskTypeEnum.Outbound.ObjToInt())
-                        {
-                            var content = PutFinish(task.NextAddress);
-                            if (!content.Status) throw new Exception(content.Message);
-                            Dt_StationManger dt_Station = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == task.NextAddress);
+                            Dt_StationManger dt_Station = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress);
                             if (dt_Station == null)
                             {
                                 throw new Exception($"{task.NextAddress}AGV绔欏彴鏈畾涔�");
@@ -138,29 +221,20 @@
                             task.CurrentAddress = dt_Station.StationCode;
                             task.NextAddress = "";
                             task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
-                            task.DeviceCode = "SC01_CSJ";
+                            task.DeviceCode = dt_Station.StationDeviceCode;
                             var up = _taskRepository.UpdateData(task);
-                            agvResponseContent.Code = up ? "0" : "1";
-                            agvResponseContent.Message = up ? "鎴愬姛" : "澶辫触";
-                            return agvResponseContent;
+                            return agvResponse.OK("鎴愬姛","0");
                         }
                         break;
-                    case "cancel":
-                        task.TaskState = TaskStatusEnum.Cancel.ObjToInt();
-                        _taskRepository.UpdateData(task);
-                        break;
                     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 agvResponse;
             //return _taskService.AgvUpdateTask(agvUpdateModel);
         }
 
@@ -173,45 +247,36 @@
         [HttpPost, HttpGet, Route("PutRequest"), AllowAnonymous]
         public WebResponseContent PutRequest(string code, int palletType)
         {
+            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)
+                short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode);
+                if (Command == 3)
                 {
-                    otherDevice.SetValue(GroundStationDBName.W_PutRequest, true, stationManger.StationCode);
-                    return WebResponseContent.Instance.OK();
+                    content.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)
-                    {
-                        return WebResponseContent.Instance.OK();
-                    }
-                    else
-                    {
-                        return WebResponseContent.Instance.Error($"鏀捐揣鐢宠涓�");
-                    }
+                    return content.Error("绂佹鏀炬枡");
                 }
+                return content;
             }
             catch (Exception ex)
             {
-                return WebResponseContent.Instance.Error(ex.Message);
+                return content.Error(ex.Message);
             }
         }
 

--
Gitblit v1.9.3