zhouquan
2 天以前 1aeb0f7e2d9f69614a8158a7992b854bedc5cdf7
src/Bro.M141.Process/MyMQTT.cs
@@ -15,6 +15,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZXing;
namespace Bro.M141.Process
{
@@ -133,7 +134,7 @@
            }
        }
        public async Task<string> MESForBasketAsync(string ztype, string zlsn, string zlpn, string zstatus, string zversion, int timeoutMs = 3000)
        public async Task<string> MESForBasketAsync(string ztype, string zlsn, string zlpn, string zstatus, string zversion, int timeoutMs = 30000)
        {
            var guid = Guid.NewGuid().ToString();
            var tcs = new TaskCompletionSource<string>(TaskCreationOptions.RunContinuationsAsynchronously);
@@ -167,11 +168,60 @@
            }
        }
        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";
            }
            //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)
            {
                ["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,16 +230,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,
                //zreson = pro.Result == "OK" ? "" : "SZ2014",
                //
                //
                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},缺陷代码为{zr}");
            _sendChannel.BasicPublish("", "auto_line_mac_barcode_queue", null, body);
            var completed = await Task.WhenAny(tcs.Task, Task.Delay(timeoutMs));
@@ -600,6 +655,17 @@
        /// 默认:N;零数尾盘:Y
        /// </summary>
        public string endtray { get; set; } = "N";
              /// <summary>
        /// 每个ztype下对应独立一个序列号,一个业务动作一个,从0开始,
        /// 每次加1,到达阈值后可重置(比如100后从0开始),只要和上一
        /// 次的不一样即可
        /// 业务动作解释:比如ztype为2时,Q01-000001解绑时传序列号1,
        /// 如果Q01-000001在一些异常情况下,需要重试则还是传序列号为1,
        /// 下一个Q01-000002解绑时传序列号2
        /// 通俗的说:一个ztype+zversion只能成功处理一次(阈值重置导致
        /// 的重复除外)
        /// </summary>
        public string zversion { get; set; }
    }
    public class AutoLineMacBarcodeQueueBak