From 0df64f37379ce5c04e380f1c411dc52b01ac6b51 Mon Sep 17 00:00:00 2001
From: HuBingJie <3146306518@qq.com>
Date: 星期六, 29 十一月 2025 13:24:32 +0800
Subject: [PATCH] 1

---
 代码管理/WCS/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RgvoperainformService.cs |  169 +++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 119 insertions(+), 50 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RgvoperainformService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RgvoperainformService.cs"
index 496ee36..5e75a4c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RgvoperainformService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RgvoperainformService.cs"
@@ -62,12 +62,15 @@
         private readonly IServiceProvider _serviceProvider;
         private static bool _isMonitoring = false;
         //private static CancellationTokenSource _cancellationTokenSource;
-        
+
         // 鍦ㄧ被绾у埆娣诲姞鐙珛鐨勭洃鎺х姸鎬�
         private bool _isOutboundMonitoring = false;
         private bool _isInboundMonitoring = false;
         private bool _isSafetyDoorMonitoring = false;
+        private bool _isPlatformMonitoring = false;
 
+        // 鍦ㄧ被鐨勫瓧娈靛尯
+        private CancellationTokenSource? _platformCancellationTokenSource;
         private CancellationTokenSource _outboundCancellationTokenSource;
         private CancellationTokenSource _inboundCancellationTokenSource;
         private CancellationTokenSource _safetyDoorCancellationTokenSource;
@@ -80,21 +83,18 @@
 
         //=================================================璇诲彇璁惧淇℃伅==========================================================
 
-
-
-
-
         /// <summary>
-        /// 鑾峰彇璁惧鐘舵�侊紙鏀寔鍑哄簱銆佸叆搴撳拰瀹夊叏闂ㄧ嫭绔嬬洃鎺э級
+        /// 鑾峰彇璁惧鐘舵�侊紙鏀寔鍑哄簱銆佸叆搴撱�佸畨鍏ㄩ棬鍜岀珯鍙扮嫭绔嬬洃鎺э級
         /// </summary>
         /// <param name="off">0:鍋滄 1:鍚姩 2:浠呮煡璇�</param>
-        /// <param name="monitorType">鐩戞帶绫诲瀷锛歰utbound-鍑哄簱 inbound-鍏ュ簱 safetydoor-瀹夊叏闂� all-鍏ㄩ儴</param>
+        /// <param name="monitorType">鐩戞帶绫诲瀷锛歰utbound-鍑哄簱 inbound-鍏ュ簱 safetydoor-瀹夊叏闂� platform-绔欏彴 all-鍏ㄩ儴</param>
         /// <returns></returns>
         public WebResponseContent GetDeviceStatusDto(int off, string monitorType = "outbound")
         {
             bool isOutbound = monitorType == "outbound" || monitorType == "all";//鍑哄簱
             bool isInbound = monitorType == "inbound" || monitorType == "all";//鍏ュ簱
             bool isSafetyDoor = monitorType == "safetydoor" || monitorType == "all";//瀹夊叏闂�
+            bool isPlatform = monitorType == "platform" || monitorType == "all";//绔欏彴
 
             if (off == 1)
             {
@@ -120,6 +120,13 @@
                     _ = Task.Run(async () => await StartDeviceMonitoring(_safetyDoorCancellationTokenSource.Token, "safetydoor"));
                 }
 
+                if (isPlatform && !_isPlatformMonitoring)
+                {
+                    _isPlatformMonitoring = true;
+                    _platformCancellationTokenSource = new CancellationTokenSource();
+                    _ = Task.Run(async () => await StartDeviceMonitoring(_platformCancellationTokenSource.Token, "platform"));
+                }
+
                 var immediateData = GetImmediateDeviceData(monitorType);
                 string message = GetMonitorStatusMessage(monitorType);
                 return WebResponseContent.Instance.OK($"璁惧鐘舵�佺洃鎺у凡鍚姩 - {message}", immediateData);
@@ -143,6 +150,12 @@
                 {
                     _isSafetyDoorMonitoring = false;
                     _safetyDoorCancellationTokenSource?.Cancel();
+                }
+
+                if (isPlatform && _isPlatformMonitoring)
+                {
+                    _isPlatformMonitoring = false;
+                    _platformCancellationTokenSource?.Cancel();
                 }
 
                 var finalData = GetImmediateDeviceData(monitorType);
@@ -212,6 +225,9 @@
                 case "safetydoor":
                     _isSafetyDoorMonitoring = false;
                     break;
+                case "platform":
+                    _isPlatformMonitoring = false;
+                    break;
             }
         }
 
@@ -236,7 +252,14 @@
                 ["MaterialIn"] = new List<string> { "RGV101" },
 
                 // 瀹夊叏闂ㄨ澶�
-                ["SafetyDoor"] = new List<string> { "HCJ2000" }, // 瀹夊叏闂�
+                ["SafetyDoor"] = new List<string> { "HCJ2000" },
+
+                // 绔欏彴璁惧 - 鏍规嵁鎮ㄦ彁渚涚殑鍗忚娣诲姞鎵�鏈夌珯鍙�
+                //        ["Platform"] = new List<string> {
+                //    "1001", "1002", "2016", "2017", "2018", "2019", "1021", "1061", "1131", "1171"
+                //}
+                ["Platform"] = new List<string> { "HCJ2000" },
+
             };
 
             // 璁惧绫诲瀷瀵瑰簲鐨勫弬鏁伴厤缃�
@@ -339,6 +362,13 @@
             ("ResetStatus", "ReadDeviceCommand", "瀹夊叏闂ㄥ浣嶇姸鎬�"),
             ("AlarmSummary", "DeviceCommand", "鎶ヨ淇℃伅"),
             ("OpenDoor", "DeviceCommand", "寮�闂ㄤ俊鎭�")
+        },
+
+                // 绔欏彴璁惧鍙傛暟閰嶇疆 - 鏍规嵁鎮ㄦ彁渚涚殑鍗忚娣诲姞
+                ["Platform"] = new List<(string, string, string)>
+        {
+            ("HCJ_GoodsStatus", "ReadDeviceCommand", "鍏夌數淇″彿"),
+            ("DoorRequest", "DeviceCommand", "浠诲姟id")
         }
             };
 
@@ -352,13 +382,13 @@
                 {
                     "outbound" => group.Key == "MotherCar" || group.Key == "TransferCar" || group.Key == "MaterialOut",
                     "inbound" => group.Key == "MaterialIn" || group.Key == "InboundMotherCar" || group.Key == "InboundTransferCar",
-                    "safetydoor" => group.Key == "SafetyDoor", // 瀹夊叏闂ㄧ洃鎺х被鍨�
+                    "safetydoor" => group.Key == "SafetyDoor",
+                    "platform" => group.Key == "Platform", // 绔欏彴鐩戞帶绫诲瀷
                     "all" => true,
                     _ => group.Key == "MotherCar" || group.Key == "TransferCar" || group.Key == "MaterialOut"
                 };
             }).ToDictionary(x => x.Key, x => x.Value);
 
-            int i = 0;
             // 閬嶅巻绛涢�夊悗鐨勮澶囩粍
             foreach (var deviceGroup in filteredDeviceGroups)
             {
@@ -413,57 +443,83 @@
                     }
                     else if (device is CommonConveyorLine conveyorLine)
                     {
-                        // 澶勭悊瀹夊叏闂ㄨ澶囷紙CommonConveyorLine 绫诲瀷锛�
-                        // 鍒涘缓涓変釜瀹夊叏闂ㄨ澶囩殑鏁版嵁
-                        List<string> safetyDoorList = new List<string> { "AQM001", "AQM002", "AQM003" };
-
-                        // 涓烘瘡涓畨鍏ㄩ棬鍒涘缓鏁版嵁
-                        foreach (string safetyDoorCode in safetyDoorList)
+                        // 澶勭悊瀹夊叏闂ㄨ澶囧拰绔欏彴璁惧锛圕ommonConveyorLine 绫诲瀷锛�
+                        if (deviceType == "SafetyDoor")
                         {
-                            var deviceData = new Dictionary<string, int>();
+                            // 瀹夊叏闂ㄨ澶囧鐞嗛�昏緫锛堜繚鎸佷笉鍙橈級
+                            List<string> safetyDoorList = new List<string> { "AQM001", "AQM002", "AQM003" };
 
-                            // 閬嶅巻璇ヨ澶囩殑鎵�鏈夊弬鏁�
-                            foreach (var param in deviceParams)
+                            foreach (string safetyDoorCode in safetyDoorList)
                             {
-                                try
-                                {
-                                    // 浣跨敤瀹夊叏闂ㄥ悕绉版煡璇㈠搴旂殑鍙傛暟
-                                    DeviceProDTO? devicePro = GetSafetyDoorDeviceProDTO(
-                                        conveyorLine, safetyDoorCode, param.DeviceProParamName, param.DeviceProParamType);
+                                var deviceData = new Dictionary<string, int>();
 
-                                    if (devicePro != null)
-                                    {
-                                        // 瀵逛簬 CommonConveyorLine 绫诲瀷锛屼娇鐢ㄩ�氱敤鐨勬暟鎹鍙栨柟娉�
-                                        int res = ReadCommonConveyorLineData(conveyorLine, devicePro.DeviceProAddress);
-                                        deviceData[param.DeviceProRemark] = res;
-                                    }
-                                    else
-                                    {
-                                        deviceData[param.DeviceProRemark] = -1; // 浣跨敤 -1 琛ㄧず鏌ヨ澶辫触
-                                    }
-                                }
-                                catch (Exception)
+                                foreach (var param in deviceParams)
                                 {
-                                    deviceData[param.DeviceProRemark] = -1; // 浣跨敤 -1 琛ㄧず鏌ヨ寮傚父
+                                    try
+                                    {
+                                        DeviceProDTO? devicePro = GetSafetyDoorDeviceProDTO(
+                                            conveyorLine, safetyDoorCode, param.DeviceProParamName, param.DeviceProParamType);
+
+                                        if (devicePro != null)
+                                        {
+                                            int res = ReadCommonConveyorLineData(conveyorLine, devicePro.DeviceProAddress);
+                                            deviceData[param.DeviceProRemark] = res;
+                                        }
+                                        else
+                                        {
+                                            deviceData[param.DeviceProRemark] = -1;
+                                        }
+                                    }
+                                    catch (Exception)
+                                    {
+                                        deviceData[param.DeviceProRemark] = -1;
+                                    }
                                 }
+
+                                finalResult[safetyDoorCode] = deviceData;
                             }
+                        }
 
-                            // 灏嗗綋鍓嶅畨鍏ㄩ棬璁惧鐨勬暟鎹坊鍔犲埌鏈�缁堢粨鏋滀腑锛屼娇鐢ㄥ畨鍏ㄩ棬鍚嶇О浣滀负key
-                            finalResult[safetyDoorCode] = deviceData;
+                        if (deviceType == "Platform")
+                        {
+                            // 瀹夊叏闂ㄨ澶囧鐞嗛�昏緫锛堜繚鎸佷笉鍙橈級
+                            List<string> PlatformList = new List<string> { "1001", "1002", "2016", "2017", "2018", "2019", "1021", "1061", "1131", "1171" };
+
+                            foreach (string Platform in PlatformList)
+                            {
+                                var deviceData = new Dictionary<string, int>();
+
+                                foreach (var param in deviceParams)
+                                {
+                                    try
+                                    {
+                                        DeviceProDTO? devicePro = GetSafetyDoorDeviceProDTO(
+                                            conveyorLine, Platform, param.DeviceProParamName, param.DeviceProParamType);
+
+                                        if (devicePro != null)
+                                        {
+                                            int res = ReadCommonConveyorLineData(conveyorLine, devicePro.DeviceProAddress);
+                                            deviceData[param.DeviceProRemark] = res;
+                                        }
+                                        else
+                                        {
+                                            deviceData[param.DeviceProRemark] = -1;
+                                        }
+                                    }
+                                    catch (Exception)
+                                    {
+                                        deviceData[param.DeviceProRemark] = -1;
+                                    }
+                                }
+
+                                finalResult[Platform] = deviceData;
+                            }
                         }
                     }
                     else
                     {
                         // 鍗充娇璁惧涓嶅瓨鍦ㄦ垨涓嶆槸鏀寔鐨勭被鍨嬶紝涔熷垱寤轰竴涓┖瀛楀吀
                         finalResult[deviceChildCode] = new Dictionary<string, int>();
-                        /*if (device != null)
-                        {
-                            Console.WriteLine($"璀﹀憡锛氳澶� {deviceChildCode} 绫诲瀷 {device.GetType().Name} 涓嶆敮鎸侊紝鏃犳硶璇诲彇鏁版嵁");
-                        }
-                        else
-                        {
-                            Console.WriteLine($"璀﹀憡锛氳澶� {deviceChildCode} 涓嶅瓨鍦�");
-                        }*/
                     }
                 }
             }
@@ -483,7 +539,8 @@
                 "outbound" => $"鍑哄簱鐩戞帶: {(_isOutboundMonitoring ? "杩愯涓�" : "宸插仠姝�")}",
                 "inbound" => $"鍏ュ簱鐩戞帶: {(_isInboundMonitoring ? "杩愯涓�" : "宸插仠姝�")}",
                 "safetydoor" => $"瀹夊叏闂ㄧ洃鎺�: {(_isSafetyDoorMonitoring ? "杩愯涓�" : "宸插仠姝�")}",
-                "all" => $"鍑哄簱鐩戞帶: {(_isOutboundMonitoring ? "杩愯涓�" : "宸插仠姝�")}, 鍏ュ簱鐩戞帶: {(_isInboundMonitoring ? "杩愯涓�" : "宸插仠姝�")}, 瀹夊叏闂ㄧ洃鎺�: {(_isSafetyDoorMonitoring ? "杩愯涓�" : "宸插仠姝�")}",
+                "platform" => $"绔欏彴鐩戞帶: {(_isPlatformMonitoring ? "杩愯涓�" : "宸插仠姝�")}", // 绔欏彴鐩戞帶鐘舵��
+                "all" => $"鍑哄簱鐩戞帶: {(_isOutboundMonitoring ? "杩愯涓�" : "宸插仠姝�")}, 鍏ュ簱鐩戞帶: {(_isInboundMonitoring ? "杩愯涓�" : "宸插仠姝�")}, 瀹夊叏闂ㄧ洃鎺�: {(_isSafetyDoorMonitoring ? "杩愯涓�" : "宸插仠姝�")}, 绔欏彴鐩戞帶: {(_isPlatformMonitoring ? "杩愯涓�" : "宸插仠姝�")}",
                 _ => $"鍑哄簱鐩戞帶: {(_isOutboundMonitoring ? "杩愯涓�" : "宸插仠姝�")}"
             };
         }
@@ -500,11 +557,11 @@
                 "outbound" => "鍑哄簱",
                 "inbound" => "鍏ュ簱",
                 "safetydoor" => "瀹夊叏闂�",
+                "platform" => "绔欏彴", // 绔欏彴鏄剧ず鍚嶇О
                 "all" => "鍏ㄩ儴",
                 _ => "鍑哄簱"
             };
         }
-
 
         /// <summary>
         /// 璇诲彇璁惧淇℃伅
@@ -517,7 +574,6 @@
             return Commonstacker.Communicator.Read<short>(DeviceProDataBlock);
         }
 
-
         /// <summary>
         /// 鏌ヨ瀹夊叏闂ㄨ澶�
         /// </summary>
@@ -530,6 +586,19 @@
             return Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SCAddress && x.DeviceProParamName == DeviceProParamName && x.DeviceProParamType == DeviceProParamType);
         }
 
+        /// <summary>
+        /// 鏌ヨ绔欏彴璁惧
+        /// </summary>
+        /// <param name="Commonstacker"></param>
+        /// <param name="PlatformCode">绔欏彴缂栧彿</param>
+        /// <param name="DeviceProParamName">鍙傛暟鍚嶇О</param>
+        /// <param name="DeviceProParamType">鍙傛暟绫诲瀷</param>
+        /// <returns></returns>
+        public static DeviceProDTO? GetPlatformDeviceProDTO(CommonConveyorLine Commonstacker, string PlatformCode, string DeviceProParamName, string DeviceProParamType)
+        {
+            return Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == PlatformCode && x.DeviceProParamName == DeviceProParamName && x.DeviceProParamType == DeviceProParamType);
+        }
+
         //=================================================璇诲彇璁惧淇℃伅==========================================================
 
 

--
Gitblit v1.9.3