From 86f899fa91e811415614dff1a699141144bfc802 Mon Sep 17 00:00:00 2001
From: quanzhou <quan.zhou@broconcentric.com>
Date: 星期五, 12 十二月 2025 13:25:37 +0800
Subject: [PATCH] S5上传mes逻辑修改及打印机逻辑修改和数据库存储数据增加

---
 src/Bro.M141.Process/MyMQTT.cs |  167 ++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 134 insertions(+), 33 deletions(-)

diff --git a/src/Bro.M141.Process/MyMQTT.cs b/src/Bro.M141.Process/MyMQTT.cs
index 78ce1c3..e458671 100644
--- a/src/Bro.M141.Process/MyMQTT.cs
+++ b/src/Bro.M141.Process/MyMQTT.cs
@@ -15,6 +15,8 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using ZXing;
+
 
 namespace Bro.M141.Process
 {
@@ -31,6 +33,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")
         {
@@ -74,8 +80,6 @@
                 InitConsumer(_receiveChannel2, _queue2, HandleQueue2Message);
             }
 
-
-
             CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, "RabbitMQ 杩炴帴鎴愬姛");
         }
 
@@ -104,7 +108,20 @@
                 }
                 else
                 {
+
                     CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ 绡叿 鏀跺埌鏈尮閰� zbguid锛歿obj?.zbguid}");
+
+                    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 绡叿鏈夎秴鏃跺姩浣滐紝鎴暀涓嬪尮閰嶄俊鎭細{message}");
+                        }
+                    }
                 }
             }
             catch (Exception ex)
@@ -124,7 +141,15 @@
                 }
                 else
                 {
-                    CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ 鐗╂枡 鏀跺埌鏈尮閰� zbguid锛歿obj?.zbguid}");
+                    Thread.Sleep(100);
+                    if (_pendingTask2.TryRemove(obj.zbguid, out var tcs2))
+                    {
+                        tcs2.TrySetResult(message);
+                    }
+                    else
+                    {
+                        CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ 鐗╂枡 鏀跺埌鏈尮閰� zbguid锛歿obj?.zbguid}");
+                    }
                 }
             }
             catch (Exception ex)
@@ -133,8 +158,41 @@
             }
         }
 
-        public async Task<string> MESForBasketAsync(string ztype, string zlsn, string zlpn, string zstatus, string zversion, int timeoutMs = 3000)
+        int num = 0;
+        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))
+            {
+                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"{keystr}鍖归厤鎴愬姛");
+                num++;
+                //var tem = MSGClasses.FirstOrDefault(u => u.key == keystr);
+                var tem = MSGClasses.Where(u => u.key == "1" && !string.IsNullOrEmpty(u.receive)).ToList();
+                //DateTime dt = DateTime.Now;
+                if (num < 10)
+                {
+                    //while ((DateTime.Now - dt).TotalMilliseconds < timeoutMes)
+                    //{
+                        if (!string.IsNullOrEmpty(tem[0].receive))
+                        {
+                            CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ {keystr}浜屾鎺ユ敹 杩斿洖鍊兼甯� {tem[0].receive}");
+                            return tem[0].receive;
+                        }
+                        Thread.Sleep(1000);
+                    //}
+                }
+                else 
+                {
+                    num = 0;
+                    CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ瓒呮椂澶勭悊娆℃暟瓒呰繃鍗佹");
+                    //return null;
+                }
+                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ浜屾鎺ユ敹鏁版嵁鎺ユ敹涓虹┖");
+                //return null;
+            }
+
             var guid = Guid.NewGuid().ToString();
             var tcs = new TaskCompletionSource<string>(TaskCreationOptions.RunContinuationsAsynchronously);
             _pendingTask1[guid] = tcs;
@@ -156,22 +214,64 @@
             CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ 绡叿 鍙戦��1锛歿message}");
             _sendChannel.BasicPublish("", "auto_line_mac_queue", null, body);
 
-            var completed = await Task.WhenAny(tcs.Task, Task.Delay(timeoutMs));
+            var completed = await Task.WhenAny(tcs.Task, Task.Delay(timeoutMes));
+
+
             _pendingTask1.TryRemove(guid, out _);
             if (completed == tcs.Task)
+            {
                 return await tcs.Task;
+            }
             else
             {
                 CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"RabbitMQ 绡叿 杩斿洖瓒呮椂1锛寊bguid={guid}");
+
+                MSGClasses.Add(new MSGClass()
+                {
+                    key = keystr,
+                    zguid = guid,
+                });
+
+                if (MSGClasses.Count > 10)
+                {
+                    MSGClasses.RemoveAt(0);                    
+                }
+
+               
                 return null;
             }
         }
 
-        public async Task<string> MESForProduceAsync(ProductModel pro, string zwoid, int znonum, string endtray = "N", string line = "NQ216", int timeoutMs = 3000)
+
+        public async Task<string> MESForProduceAsync(ProductModel pro, string zversion, int znonum, string endtray = "N", string line = "NQ216", int timeoutMs = 3000)
         {
             var guid = Guid.NewGuid().ToString();
             var tcs = new TaskCompletionSource<string>(TaskCreationOptions.RunContinuationsAsynchronously);
             _pendingTask2[guid] = tcs;
+
+            string zresult = "OK";
+            if (string.IsNullOrWhiteSpace(pro.Result))
+            {
+                zresult = "NG";
+            }
+            else if (!"OK".Equals(pro.Result))
+            {
+                zresult = "NG";
+            }
+
+            var DefectCodeMap = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
+            {
+                ["OK"] = "",
+                ["寮傝壊"] = "SZ2001",
+                ["纾ㄥ嵃"] = "SZ2012",
+                ["鍘嬩激"] = "SZ2014",
+                ["鍙樺舰"] = "SZ2014",
+                ["鍒掍激"] = "SZ2021"
+            };
+            const string DefaultErrorCode = "S31006";
+
+            string zr = DefectCodeMap.TryGetValue(pro.Result, out var code) ? code : DefaultErrorCode;
+
 
 
             var msgObj = new AutoLineMacBarcodeQueue
@@ -180,20 +280,21 @@
                 zdate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"),
                 zline = line,
                 zbarcode = pro.SN,
-                zresult = string.IsNullOrWhiteSpace(pro.Result) ? "NG" : pro.Result,
-                zreson = pro.Result == "OK" ? "" : "SZ2014",
+                zresult = zresult,
+                zreson = zr,
                 zno = znonum.ToString(),
-                zwoid = zwoid,
-                endtray = endtray
+                zwoid = pro.Zword,
+                endtray = endtray,
+                zversion = zversion
             };
 
             var message = JsonConvert.SerializeObject(msgObj);
             var body = Encoding.UTF8.GetBytes(message);
-            CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ鍙戦�佷骇鍝亄pro.PID} 鏁版嵁2锛歿message}");
+            CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ鍙戦�佷骇鍝亄pro.PID} 鏁版嵁2锛歿message},缂洪櫡浠g爜涓簕zr}");
             _sendChannel.BasicPublish("", "auto_line_mac_barcode_queue", null, body);
 
             var completed = await Task.WhenAny(tcs.Task, Task.Delay(timeoutMs));
-            _pendingTask2.TryRemove(guid, out _);
+            //_pendingTask2.TryRemove(guid, out _);
             if (completed == tcs.Task)
                 return await tcs.Task;
             else
@@ -213,8 +314,15 @@
         }
     }
 
+    public class MSGClass
+    {
+        public string key { get; set; }
 
+        public string zguid { get; set; }
 
+        public string receive { get; set; }
+
+    }
 
 
 
@@ -470,21 +578,6 @@
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
     public class AutoLineMacQueue
     {
         /// <summary>
@@ -541,9 +634,7 @@
         /// 2锛氶婊¤浇锛堣〃绀�4鍙蜂綅棰勬弧杞斤紝3鍙蜂綅寮�濮嬪線4鍙蜂綅鎼椂锛�
         /// </summary>
         public string zstatus { get; set; }
-
     }
-
     public class AutoLineMacQueueBak
     {
         public string zbguid { get; set; }
@@ -560,14 +651,12 @@
         /// </summary>
         public string zwoid { get; set; }
     }
-
     public class AutoLineMacBarcodeQueue
     {
         /// <summary>
         /// 鍞竴ID
         /// </summary>
         public string zbguid { get; set; } = Guid.NewGuid().ToString();
-
         /// <summary>
         /// 鏃堕棿鎴筹紝绮剧‘鍒拌�楃
         /// </summary>
@@ -600,6 +689,17 @@
         /// 榛樿锛歂;闆舵暟灏剧洏锛歒
         /// </summary>
         public string endtray { get; set; } = "N";
+        /// <summary>
+        /// 姣忎釜ztype涓嬪搴旂嫭绔嬩竴涓簭鍒楀彿锛屼竴涓笟鍔″姩浣滀竴涓紝浠�0寮�濮嬶紝
+        /// 姣忔鍔�1锛屽埌杈鹃槇鍊煎悗鍙噸缃紙姣斿100鍚庝粠0寮�濮嬶級锛屽彧瑕佸拰涓婁竴
+        /// 娆$殑涓嶄竴鏍峰嵆鍙�
+        /// 涓氬姟鍔ㄤ綔瑙i噴锛氭瘮濡倆type涓�2鏃讹紝Q01-000001瑙g粦鏃朵紶搴忓垪鍙�1锛�
+        /// 濡傛灉Q01-000001鍦ㄤ竴浜涘紓甯告儏鍐典笅锛岄渶瑕侀噸璇曞垯杩樻槸浼犲簭鍒楀彿涓�1,
+        /// 涓嬩竴涓猀01-000002瑙g粦鏃朵紶搴忓垪鍙�2
+        /// 閫氫織鐨勮锛氫竴涓獄type+zversion鍙兘鎴愬姛澶勭悊涓�娆★紙闃堝�奸噸缃鑷�
+        /// 鐨勯噸澶嶉櫎澶栵級
+        /// </summary>
+        public string zversion { get; set; }
     }
 
     public class AutoLineMacBarcodeQueueBak
@@ -617,6 +717,7 @@
         /// </summary>
         public string tary_label { get; set; }
     }
-
-
 }
+
+
+

--
Gitblit v1.8.0