src/Bro.M141.Process/MyMQTT.cs
@@ -61,7 +61,6 @@
            _connection = _factory.CreateConnection();
            _sendChannel = _connection.CreateModel();
            if (channel == 0)
            {
                _receiveChannel1 = _connection.CreateModel();
@@ -114,6 +113,7 @@
                    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;
@@ -140,7 +140,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)
@@ -148,35 +156,40 @@
                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"RabbitMQ 物料 解析异常:{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)
        int num = 0;
        public async Task<string> MESForBasketAsync(string ztype, string zlsn, string zlpn, string zstatus, string zversion, int timeoutMes = 60000)
        {
            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)
                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"{keystr}匹配成功");
                num++;
                var tem = MSGClasses.Where(u => u.key == keystr && !string.IsNullOrEmpty(u.receive)).ToList();
                if (num < 10)
                {
                    if (!string.IsNullOrEmpty(tem.receive))
                    if (tem!=null)
                    {
                        CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ {keystr}二次接收 返回值正常 {tem.receive}");
                        return tem.receive;
                    }
                    Thread.Sleep(1000);
                        if (tem.Count()>0)
                        {
                            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);
                        }
                    }
                }
                MSGClasses.RemoveAll(u => u.key == keystr);
                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ {keystr}二次接收 返回值为空");
                return null;
                else
                {
                    num = 0;
                    CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ超时处理次数超过十次");
                }
                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Information, $"RabbitMQ二次接收数据接收为空");
            }
            var guid = Guid.NewGuid().ToString();
            var tcs = new TaskCompletionSource<string>(TaskCreationOptions.RunContinuationsAsynchronously);
@@ -201,7 +214,6 @@
            var completed = await Task.WhenAny(tcs.Task, Task.Delay(timeoutMes));
            _pendingTask1.TryRemove(guid, out _);
            if (completed == tcs.Task)
            {
@@ -209,22 +221,23 @@
            }
            else
            {
                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"RabbitMQ 篮具 返回超时1,zbguid={guid}");
                MSGClasses.Add(new MSGClass()
                {
                    key = keystr,
                    zguid = guid,
                });
                if (MSGClasses.Count > 10)
                {
                    MSGClasses.RemoveAt(0);
                }
                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"RabbitMQ 篮具 返回超时1,zbguid={guid}");
                return null;
            }
        }
        public async Task<string> MESForProduceAsync(ProductModel pro, string zversion, int znonum, string endtray = "N", string line = "NQ216", int timeoutMs = 3000)
@@ -242,31 +255,6 @@
            {
                zresult = "NG";
            }
            //string zr;
            //switch (pro.Result)
            //{
            //    case "ok":
            //        zr = "";
            //        break;
            //    case "异色":
            //        zr = "SZ2001";
            //        break;
            //    case "磨印":
            //        zr = "SZ2012";
            //        break;
            //    case "压伤":
            //        zr = "SZ2014";
            //        break;
            //    case "变形":
            //        zr = "SZ2014";
            //        break;
            //    case "划伤":
            //        zr = "SZ2021";
            //        break;
            //    default:
            //        zr = "S31006";
            //        break;
            //}
            var DefectCodeMap = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
            {
@@ -281,8 +269,6 @@
            string zr = DefectCodeMap.TryGetValue(pro.Result, out var code) ? code : DefaultErrorCode;
            var msgObj = new AutoLineMacBarcodeQueue
            {
                zbguid = guid,
@@ -291,10 +277,6 @@
                zbarcode = pro.SN,
                zresult = zresult,
                zreson = zr,
                //zreson = pro.Result == "OK" ? "" : "SZ2014",
                //
                //
                zno = znonum.ToString(),
                zwoid = pro.Zword,
                endtray = endtray,
@@ -307,7 +289,7 @@
            _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
@@ -330,11 +312,8 @@
    public class MSGClass
    {
        public string key { get; set; }
        public string zguid { get; set; }
        public string receive { get; set; }
    }