From 66e0168fe68ae5641041b2bceb3f0bb9640df09f Mon Sep 17 00:00:00 2001
From: quanzhou <quan.zhou@broconcentric.com>
Date: 星期五, 22 八月 2025 09:21:39 +0800
Subject: [PATCH] 添加MES超时队列匹配功能,vision错误自动累加和清零动作

---
 src/Bro.M141.Process/MyMQTT.cs |   92 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 69 insertions(+), 23 deletions(-)

diff --git a/src/Bro.M141.Process/MyMQTT.cs b/src/Bro.M141.Process/MyMQTT.cs
index eba6af5..84ea30a 100644
--- a/src/Bro.M141.Process/MyMQTT.cs
+++ b/src/Bro.M141.Process/MyMQTT.cs
@@ -8,6 +8,7 @@
 using RabbitMQ.Client;
 using RabbitMQ.Client.Events;
 using SourceGrid.Cells.Editors;
+
 using Sunny.UI.Win32;
 using System;
 using System.Collections.Concurrent;
@@ -16,6 +17,7 @@
 using System.Text;
 using System.Threading.Tasks;
 using ZXing;
+
 
 namespace Bro.M141.Process
 {
@@ -32,6 +34,10 @@
 
         private readonly string _queue1 = "auto_line_mac_queue_bak";
         private readonly string _queue2 = "auto_line_mac_barcode_queue_bak";
+
+        List<MSGClass> MSGClasses = new List<MSGClass>();
+
+
 
         public RabbitMQHelper(string host = "10.2.20.114", int port = 15672, string user = "aoiUser", string pwd = "Chia@aoi")
         {
@@ -105,6 +111,15 @@
                 }
                 else
                 {
+                    if (MSGClasses.Any(u => u.zguid == obj?.zbguid))
+                    {
+                        var tem = MSGClasses.FirstOrDefault(u => u.zguid == obj?.zbguid);
+                        if (!string.IsNullOrEmpty(tem.receive))
+                        {
+                            tem.receive = message;
+                        }
+                    }
+
                     CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ 绡叿 鏀跺埌鏈尮閰� zbguid锛歿obj?.zbguid}");
                 }
             }
@@ -133,12 +148,37 @@
                 CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"RabbitMQ 鐗╂枡 瑙f瀽寮傚父锛歿ex.Message}");
             }
         }
+        //Dictionary<string, Task> dic_ispass = new Dictionary<string, Task>();///value涓烘敹鍒版暟鎹�
 
         public async Task<string> MESForBasketAsync(string ztype, string zlsn, string zlpn, string zstatus, string zversion, int timeoutMes = 30000)
         {
+
+            string keystr = ztype + "_" + zlsn + "_" + zlpn + "_" + zstatus;
+
+            if (MSGClasses.Any(u => u.key == keystr))
+            {
+                var tem = MSGClasses.FirstOrDefault(u => u.key == keystr);
+
+                DateTime dt = DateTime.Now;
+                while ((DateTime.Now - dt).TotalMilliseconds < timeoutMes)
+                {
+                    if (!string.IsNullOrEmpty(tem.receive))
+                    {
+                        return tem.receive;
+                    }
+                    Thread.Sleep(1000);
+                }
+                MSGClasses.RemoveAll(u => u.key == keystr);
+                return tem.receive;
+            }
+
+
+
+
             var guid = Guid.NewGuid().ToString();
             var tcs = new TaskCompletionSource<string>(TaskCreationOptions.RunContinuationsAsynchronously);
             _pendingTask1[guid] = tcs;
+
 
             var msgObj = new AutoLineMacQueue
             {
@@ -158,15 +198,32 @@
             _sendChannel.BasicPublish("", "auto_line_mac_queue", null, body);
 
             var completed = await Task.WhenAny(tcs.Task, Task.Delay(timeoutMes));
+
+
             _pendingTask1.TryRemove(guid, out _);
             if (completed == tcs.Task)
+            {
                 return await tcs.Task;
+            }
             else
             {
+                MSGClasses.Add(new MSGClass()
+                {
+                    key = keystr,
+                    zguid = guid,
+                });
+
+
                 CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"RabbitMQ 绡叿 杩斿洖瓒呮椂1锛寊bguid={guid}");
                 return null;
             }
         }
+
+
+
+
+
+
 
         public async Task<string> MESForProduceAsync(ProductModel pro, string zversion, int znonum, string endtray = "N", string line = "NQ216", int timeoutMs = 3000)
         {
@@ -219,7 +276,7 @@
                 ["鍒掍激"] = "SZ2021"
             };
             const string DefaultErrorCode = "S31006";
-           
+
             string zr = DefectCodeMap.TryGetValue(pro.Result, out var code) ? code : DefaultErrorCode;
 
 
@@ -268,8 +325,15 @@
         }
     }
 
+    public class MSGClass
+    {
+        public string key { get; set; }
 
+        public string zguid { get; set; }
 
+        public string receive { get; set; }
+
+    }
 
 
 
@@ -525,21 +589,6 @@
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
     public class AutoLineMacQueue
     {
         /// <summary>
@@ -596,9 +645,7 @@
         /// 2锛氶婊¤浇锛堣〃绀�4鍙蜂綅棰勬弧杞斤紝3鍙蜂綅寮�濮嬪線4鍙蜂綅鎼椂锛�
         /// </summary>
         public string zstatus { get; set; }
-
     }
-
     public class AutoLineMacQueueBak
     {
         public string zbguid { get; set; }
@@ -615,14 +662,12 @@
         /// </summary>
         public string zwoid { get; set; }
     }
-
     public class AutoLineMacBarcodeQueue
     {
         /// <summary>
         /// 鍞竴ID
         /// </summary>
         public string zbguid { get; set; } = Guid.NewGuid().ToString();
-
         /// <summary>
         /// 鏃堕棿鎴筹紝绮剧‘鍒拌�楃
         /// </summary>
@@ -655,7 +700,7 @@
         /// 榛樿锛歂;闆舵暟灏剧洏锛歒
         /// </summary>
         public string endtray { get; set; } = "N";
-              /// <summary>
+        /// <summary>
         /// 姣忎釜ztype涓嬪搴旂嫭绔嬩竴涓簭鍒楀彿锛屼竴涓笟鍔″姩浣滀竴涓紝浠�0寮�濮嬶紝
         /// 姣忔鍔�1锛屽埌杈鹃槇鍊煎悗鍙噸缃紙姣斿100鍚庝粠0寮�濮嬶級锛屽彧瑕佸拰涓婁竴
         /// 娆$殑涓嶄竴鏍峰嵆鍙�
@@ -683,6 +728,7 @@
         /// </summary>
         public string tary_label { get; set; }
     }
-
-
 }
+
+
+

--
Gitblit v1.8.0