From f59f3b24814387573b5bca9a9b6c832a3720ee7e Mon Sep 17 00:00:00 2001
From: zhangchengsong <zhangchengsong@hnkhzn.com>
Date: 星期三, 22 四月 2026 17:46:35 +0800
Subject: [PATCH] 最新

---
 项目代码/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs |  204 ++++++++++++++++++++------------------------------
 1 files changed, 82 insertions(+), 122 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs"
index f1ad7fe..8257891 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs"
@@ -229,174 +229,134 @@
                 return apiResponse.ErrorResponse($"WCS浠诲姟娣诲姞閿欒锛屽師鍥狅細{ex.Message}");
             }
         }
-
-
-        //璁剧疆鍏夊箷
+        /// <summary>
+        /// 璁剧疆鍏夊箷
+        /// </summary>
+        /// <param name="setCurtain"></param>
+        /// <returns></returns>
         public ApiResponse setCurtain(SetCurtainRequest setCurtain)
         {
-            //鑾峰彇WMS璋冨彇鐨勫弬鏁�
+            if (setCurtain == null || setCurtain.Datas == null || setCurtain.Datas.Length == 0)
+            {
+                return new ApiResponse().ErrorResponse("璇锋眰鍙傛暟鎴栧簱鍙e垪琛ㄤ笉鑳戒负绌�");
+            }
+            if (string.IsNullOrWhiteSpace(setCurtain.Operate))
+            {
+                return new ApiResponse().ErrorResponse("鎿嶄綔绫诲瀷(Operate)涓嶈兘涓虹┖");
+            }
+
             WriteLog.Write_Log("璁剧疆鍏夊箷鎺ュ彛", "璁剧疆鍏夊箷鎺ュ彛淇℃伅", $"搴撳彛鍚嶇О锛氥�恵string.Join(",", setCurtain.Datas)}銆�,鐢宠鐘舵�侊細銆恵setCurtain.Operate}銆�");
             ApiResponse apiResponse = new ApiResponse();
-            bool HandShakeboolOPEN = false;
-            bool HandShakeboolCLOSE = false;
+            bool allSuccess = true;
+            var specialPorts = new[] { "G01", "G06", "G07" };
+
             try
             {
-                Dictionary<string, int> portStatusDict = new Dictionary<string, int>();
-                foreach (string DeStateName in setCurtain.Datas)
+                foreach (string portName in setCurtain.Datas)
                 {
-                    string DeciceCodes = "1003";
-                    if (DeStateName.StartsWith("C")) DeciceCodes = "1004";
+                    if (string.IsNullOrWhiteSpace(portName)) { allSuccess = false; continue; }
+                    string deviceCode = portName.StartsWith("C") ? "1004" : "1003";
 
-                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeciceCodes);
-                    if (device == null) return apiResponse.ErrorResponse("WCS鏈兘鑾峰彇鍒板簱鍙e疄渚�");
+                        CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == deviceCode) as CommonConveyorLine;
+                        if (conveyorLine == null) { allSuccess = false; continue; }
 
-                    CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                        DeviceProDTO? handShakeDto = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == portName && x.DeviceProParamName == "HandShake");
+                        DeviceProDTO? requestDto = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == portName && x.DeviceProParamName == "Request");
+                        if (handShakeDto == null) { allSuccess = false; continue; }
 
-                    DeviceProDTO? HandShake = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeStateName && x.DeviceProParamName == "HandShake");
-                    if (HandShake == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{setCurtain.Datas},瀵瑰簲鐨勫崗璁�");
-                    DeviceProDTO? Request = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeStateName && x.DeviceProParamName == "Request");
-                    if (HandShake == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{setCurtain.Datas},瀵瑰簲鐨勫崗璁�");
-                    
-                    if (setCurtain.Operate.Equals("OPEN"))
-                    {
-                        //鍐欏叆plc锛宎gv閫�鍑轰腑鎵撳紑淇″彿
-                        if(DeStateName == "G01" || DeStateName == "G06" || DeStateName == "G07")
+                        bool writeResult = false;
+                        //StringComparison.OrdinalIgnoreCase鏄吋瀹瑰ぇ灏忓啓
+                        if (setCurtain.Operate.Equals("OPEN", StringComparison.OrdinalIgnoreCase))
                         {
-                            HandShakeboolOPEN = conveyorLine.Communicator.Write<short>(Request.DeviceProAddress, 0);
+                            if (specialPorts.Contains(portName))
+                                writeResult = conveyorLine.Communicator.Write<short>(requestDto.DeviceProAddress, 0);
+                            else
+                                writeResult = conveyorLine.Communicator.Write<short>(handShakeDto.DeviceProAddress, 0);
                         }
-                        else
+                        else if (setCurtain.Operate.Equals("CLOSE", StringComparison.OrdinalIgnoreCase))
                         {
-                            HandShakeboolOPEN = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 0);
+                            if (specialPorts.Contains(portName))
+                                writeResult = conveyorLine.Communicator.Write<short>(handShakeDto.DeviceProAddress, 1) && conveyorLine.Communicator.Write<short>(requestDto.DeviceProAddress, 1);
+                            else
+                                writeResult = conveyorLine.Communicator.Write<short>(handShakeDto.DeviceProAddress, 1);
                         }
-
+                        if (!writeResult) allSuccess = false;
                     }
-                    else
-                    {
-                        //鍐欏叆plc锛宎gv杩涘叆鍏抽棴鍏夋爡淇″彿
-                        if (DeStateName == "G01" || DeStateName == "G06" || DeStateName == "G07")
-                        {
-                            HandShakeboolCLOSE = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 1) && conveyorLine.Communicator.Write<short>(Request.DeviceProAddress, 1);
-                        }
-                        else
-                        {
-                            HandShakeboolCLOSE = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 1);
-                        }
 
-                    }
-                }
-                 if ((HandShakeboolOPEN && setCurtain.Operate.Equals("OPEN") )|| (HandShakeboolCLOSE && setCurtain.Operate.Equals("CLOSE")))
-                 {
-                    return apiResponse.SuccessResponse();
-                 }
-                else
-                {
-                 return apiResponse.ErrorResponse("鍐欏叆plc杩涘叆淇″彿澶辫触");
-                }
-                }
+                return allSuccess ? apiResponse.SuccessResponse() : apiResponse.ErrorResponse("閮ㄥ垎/鍏ㄩ儴搴撳彛鍐欏叆PLC淇″彿澶辫触");
+            }
             catch (Exception ex)
             {
-                return apiResponse.ErrorResponse($"WCS浠诲姟娣诲姞閿欒锛屽師鍥狅細{ex.Message}");
+                WriteLog.Write_Log("璁剧疆鍏夊箷鎺ュ彛寮傚父", "閿欒淇℃伅", ex.ToString());
+                return apiResponse.ErrorResponse($"WCS璁剧疆鍏夊箷閿欒锛屽師鍥狅細{ex.Message}");
             }
         }
-        
-
-
-
-        //agv杩涘嚭鐘舵�佸弽棣�
+       #endregion
+        /// <summary>
+        /// agv杩涘嚭鍏ュ弽棣�
+        /// </summary>
+        /// <param name="agvUpdateRequest"></param>
+        /// <returns></returns>
         public ApiResponse getAGVStatus(AgvUpdateRequest agvUpdateRequest)
         {
-            //鑾峰彇WMS璋冨彇鐨勫弬鏁�
-            WriteLog.Write_Log("agv杩涘嚭鐘舵�佸弽棣堟帴鍙�", "agv杩涘嚭鐘舵�佷俊鎭�", $"搴撳彛鍚嶇О锛氥�恵agvUpdateRequest.warehousenumber}銆戯紝鐢宠鐘舵�侊細銆恵agvUpdateRequest.agvstatus}銆�");
+            if (agvUpdateRequest == null) return new ApiResponse().ErrorResponse("璇锋眰鍙傛暟涓嶈兘涓虹┖");
+            if (string.IsNullOrWhiteSpace(agvUpdateRequest.warehousenumber)) return new ApiResponse().ErrorResponse("搴撳彛缂栧彿涓嶈兘涓虹┖");
 
+            WriteLog.Write_Log("agv杩涘嚭鐘舵�佸弽棣堟帴鍙�", "agv杩涘嚭鐘舵�佷俊鎭�", $"搴撳彛鍚嶇О锛氥�恵agvUpdateRequest.warehousenumber}銆戯紝鐢宠鐘舵�侊細銆恵agvUpdateRequest.agvstatus}銆�");
             ApiResponse apiResponse = new ApiResponse();
+
             try
             {
-                string DeciceCodes = "1003";
-                if (agvUpdateRequest.warehousenumber.StartsWith("C")) DeciceCodes = "1004";
+                string deviceCode = agvUpdateRequest.warehousenumber.StartsWith("C") ? "1004" : "1003";
 
-                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeciceCodes);
-                if (device == null) return apiResponse.ErrorResponse("WCS鏈兘鑾峰彇鍒板簱鍙e疄渚�");
-                CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                    CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == deviceCode) as CommonConveyorLine;
+                    if (conveyorLine == null) return apiResponse.ErrorResponse("WCS鏈兘鑾峰彇鍒板簱鍙e疄渚�");
 
-                //鏄惁鍙繘鍑�
-                DeviceProDTO? HandShake = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "HandShake");
-                if (HandShake == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{agvUpdateRequest.warehousenumber},瀵瑰簲鐨勫崗璁�");
-                DeviceProDTO? Request = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "Request");
-              
+                    DeviceProDTO? handShake = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "HandShake");
+                    if (handShake == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{agvUpdateRequest.warehousenumber},瀵瑰簲鐨勫崗璁�");
+                    DeviceProDTO? request = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "Request");
+
                     if (agvUpdateRequest.agvstatus == 1)
                     {
-                        bool HandShakebool = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 1);
-                        if (HandShakebool)
-                        {
-                        if (Request != null)
-                        {
-                            conveyorLine.Communicator.Write<short>(Request.DeviceProAddress, 1);
-                        }
-                            //鏄惁鍙繘鍑�    1鍏佽鍙�  2鍏佽鏀�
-                            DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "PermitHandShake");
-                            //鏄惁鏈夎揣
-                            DeviceProDTO? StationNumProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "StationNum");
-                            if (deviceProDTO == null || StationNumProDTO == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{agvUpdateRequest.warehousenumber},瀵瑰簲鐨勫崗璁�");
-                            int statusValue = 0;
-                            int portStatus = conveyorLine.Communicator.Read<ushort>(deviceProDTO.DeviceProAddress);
-                            int StationStatus = conveyorLine.Communicator.Read<ushort>(StationNumProDTO.DeviceProAddress);
+                        bool writeHandShake = conveyorLine.Communicator.Write<short>(handShake.DeviceProAddress, 1);
+                        if (!writeHandShake) return apiResponse.ErrorResponse("鍐欏叆plc杩涘叆淇″彿澶辫触");
+                        if (request != null) conveyorLine.Communicator.Write<short>(request.DeviceProAddress, 1);
 
-                            //鏈夎揣锛屽彲杩涗俊鍙�
-                            statusValue = ((portStatus == 1 && StationStatus == 1) || (portStatus == 2 && StationStatus == 0)) ? 1 : (portStatus == 0) ? 0 : 0;
-                            if (agvUpdateRequest.warehousenumber == "G01" || agvUpdateRequest.warehousenumber == "G06" || agvUpdateRequest.warehousenumber == "G07")
-                            {
-                                if (statusValue == 1)
-                                {
-                                    return apiResponse.SuccessResponse();
+                        var specialPorts = new[] { "G01", "G06", "G07" };
+                        if (specialPorts.Contains(agvUpdateRequest.warehousenumber))
+                        {
+                            DeviceProDTO? permitHandShake = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "PermitHandShake");
+                            DeviceProDTO? stationNum = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "StationNum");
+                            if (permitHandShake == null || stationNum == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{agvUpdateRequest.warehousenumber},瀵瑰簲鐨勫崗璁�");
 
-                                }
-                                else
-                                {
-                                    conveyorLine.Communicator.Write<short>(Request.DeviceProAddress, 0);
-                                    return apiResponse.ErrorResponse("璇诲彇plc涓嶅彲杩涘叆淇℃伅");
-                                }
-                            }
-                            else
+                            int portStatus = conveyorLine.Communicator.Read<ushort>(permitHandShake.DeviceProAddress);
+                            int stationStatus = conveyorLine.Communicator.Read<ushort>(stationNum.DeviceProAddress);
+                            bool canEnter = (portStatus == 1 && stationStatus == 1) || (portStatus == 2 && stationStatus == 0);
+                            if (!canEnter)
                             {
-                                return apiResponse.SuccessResponse();
+                                if (request != null) conveyorLine.Communicator.Write<short>(request.DeviceProAddress, 0);
+                                return apiResponse.ErrorResponse("璇诲彇plc涓嶅彲杩涘叆淇℃伅");
                             }
                         }
-                        else
-                        {
-                            return apiResponse.ErrorResponse("鍐欏叆plc杩涘叆淇″彿澶辫触");
-                        }
+                        return apiResponse.SuccessResponse();
                     }
                     else if (agvUpdateRequest.agvstatus == 2)
                     {
-                        //鍐欏叆杈撻�佺嚎淇″彿
-                        bool portStatus = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 0);
-                        if (portStatus)
-                        {
-                            if (Request != null)
-                            {
-                                conveyorLine.Communicator.Write<short>(Request.DeviceProAddress, 0);
-                            }
-                            return apiResponse.SuccessResponse();
-                        }
-                        else
-                        {
-                            return apiResponse.ErrorResponse("鍐欏叆plc娓呴櫎淇″彿澶辫触");
-                        }
+                        bool clearHandShake = conveyorLine.Communicator.Write<short>(handShake.DeviceProAddress, 0);
+                        if (!clearHandShake) return apiResponse.ErrorResponse("鍐欏叆plc娓呴櫎淇″彿澶辫触");
+                        if (request != null) conveyorLine.Communicator.Write<short>(request.DeviceProAddress, 0);
+                        return apiResponse.SuccessResponse();
                     }
                     else
                     {
                         return apiResponse.ErrorResponse($"agv瀵瑰簲鐨勭敵璇烽敊璇紝瀛楁锛歛gvstatus锛岀敵璇风殑鍊硷細{agvUpdateRequest.agvstatus}");
                     }
-
             }
             catch (Exception ex)
             {
-                return apiResponse.ErrorResponse($"WCS浠诲姟娣诲姞閿欒锛屽師鍥狅細{ex.Message}");
+                return apiResponse.ErrorResponse($"WCS AGV鐘舵�侀敊璇紝鍘熷洜锛歿ex.Message}");
             }
         }
-        #endregion
-
-
 
         #region 璋冨彇涓婃父鎺ュ彛
         public CommandResult taskreturn(int taskId, string taskType, string invType, string psd)
@@ -412,7 +372,7 @@
 
                 commandResult = HttpHelper.Post<CommandResult>(urlWMStaskreturn, taskInfo1, "浠诲姟鐘舵�佸洖璋�");
 
-                WriteLog.Write_Log("鍚屾缁欎笂娓稿弽棣堜换鍔″畬鎴�", "浠诲姟淇℃伅", $"浠诲姟鍙凤細{taskId}", $"璋冨彇鍙傛暟锛歿taskInfo1.ToJsonString()},杩斿洖鍙傛暟锛歿commandResult.ToJsonString()}");
+                WriteLog.Write_Log("鍚屾缁欎笂娓稿弽棣堜换鍔″畬鎴�", "浠诲姟淇℃伅", $"浠诲姟鍙凤細銆恵taskId}銆�", $"璋冨彇鍙傛暟锛氥�恵taskInfo1.ToJsonString()}銆慭n杩斿洖鍙傛暟锛歿commandResult.ToJsonString()}銆�");
                 return commandResult;
             }
             catch (Exception ex)
@@ -422,7 +382,7 @@
                 string resujos = $"WCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}";
                 commandResult.result = resujos.ToJsonString();
 
-                WriteLog.Write_Log("鍚屾缁欎笂娓稿弽棣堜换鍔″畬鎴�", "浠诲姟淇℃伅", $"浠诲姟鍙凤細{taskId}", $"闇�瑕佷笂浼燱MS淇℃伅鍐呭锛歿commandResult.ToJsonString()},WCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}");
+                WriteLog.Write_Log("鍚屾缁欎笂娓稿弽棣堜换鍔″畬鎴�", "浠诲姟淇℃伅", $"浠诲姟鍙凤細銆恵taskId}銆�", $"闇�瑕佷笂浼燱MS淇℃伅鍐呭锛氥�恵commandResult.ToJsonString()}銆慭nWCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}");
                 return commandResult;
             }
             

--
Gitblit v1.9.3