From 1f2fa3f54d4a7b5a2f601c4c947a06476342e3bd Mon Sep 17 00:00:00 2001
From: patrick.xu <patrick.xu@broconcentric.com>
Date: 星期五, 22 一月 2021 09:23:06 +0800
Subject: [PATCH] 1. gocator驱动将system.stop移到system.ReceiveData之后 2. 修改测量完成后状态切换逻辑,避免安全光线等干扰 3. 添加设备异常输出日志记录 4. 产品结果输出时做硬盘文件记录

---
 src/Bro.M071.Process/M071Process_MES.cs |   79 ++++++++++++++++++++++++++++++++++-----
 1 files changed, 68 insertions(+), 11 deletions(-)

diff --git a/src/Bro.M071.Process/M071Process_MES.cs b/src/Bro.M071.Process/M071Process_MES.cs
index a5277b3..f87208d 100644
--- a/src/Bro.M071.Process/M071Process_MES.cs
+++ b/src/Bro.M071.Process/M071Process_MES.cs
@@ -82,14 +82,14 @@
         {
             get
             {
-                if (incomingCheckMethod == null)
+                if (dataUploadMethod == null)
                 {
-                    incomingCheckMethod = InitialMESWebServiceMethod(DataUploadMethodName, out DataUploadObj);
+                    dataUploadMethod = InitialMESWebServiceMethod(DataUploadMethodName, out DataUploadObj);
                 }
 
-                return incomingCheckMethod;
+                return dataUploadMethod;
             }
-            set => incomingCheckMethod = value;
+            set => dataUploadMethod = value;
         }
 
         private MethodInfo InitialMESWebServiceMethod(string methodName, out object invokeClass)
@@ -138,13 +138,19 @@
             //string paraStr = JsonConvert.SerializeObject(paras);
             //LogAsync(DateTime.Now, $"MES鍏ユ枡妫�娴� {url}", paraStr);
 
-            IncomingCheckMethod = InitialMESWebServiceMethod(IncomingCheckMethodName, out IncomingCheckObj);
+            //IncomingCheckMethod = InitialMESWebServiceMethod(IncomingCheckMethodName, out IncomingCheckObj);
 
             Stopwatch sw = new Stopwatch();
             sw.Start();
             //var result = _webApiHelper.dooPost(url, paraStr);
 
-            object[] paras = new object[] { barcode, Config.StationCode };
+            object[] paras = new object[] { barcode, Config.StationCode, Config.ProjectCode };
+
+            if (Config.IsEnableMESLog)
+            {
+                LogAsync(DateTime.Now, $"MES鍏ユ枡妫�娴�", JsonConvert.SerializeObject(paras));
+            }
+
             var result = IncomingCheckMethod?.Invoke(IncomingCheckObj, paras).ToString();
             var mesReturn = (MESIncomingCheckReturn)int.Parse(result);
             sw.Stop();
@@ -178,7 +184,7 @@
             //string paraStr = JsonConvert.SerializeObject(paras);
             //LogAsync(DateTime.Now, $"MES鏁版嵁涓婁紶 {url}", paraStr);
 
-            DataUploadMethod = InitialMESWebServiceMethod(DataUploadMethodName, out DataUploadObj);
+            //DataUploadMethod = InitialMESWebServiceMethod(DataUploadMethodName, out DataUploadObj);
 
             Stopwatch sw = new Stopwatch();
             sw.Start();
@@ -195,10 +201,14 @@
                 pMeasure.PResult == "OK" ? "PASS" : "FAIL",
                 Config.LineCode,
                 GetMESSlantData(pMeasure),
-                GetMESAlignmentData(pMeasure)
+                GetMESAlignmentData(pMeasure),
+                GetNGKeys(pMeasure)
             };
 
-            //LogAsync(DateTime.Now, $"{barcode}浜у搧妫�娴嬫暟鎹笂浼�", JsonConvert.SerializeObject(paras));
+            if (Config.IsEnableMESLog)
+            {
+                LogAsync(DateTime.Now, $"{barcode}浜у搧妫�娴嬫暟鎹笂浼�", JsonConvert.SerializeObject(paras));
+            }
 
             var result = DataUploadMethod?.Invoke(DataUploadObj, paras).ToString();
             var mesReturn = (MESUploadReturn)int.Parse(result);
@@ -210,12 +220,59 @@
 
         private string GetMESAlignmentData(ProductionMeasurement pMeasure)
         {
-            return string.Join(",", pMeasure.Measurements.Where(u => u.MeasureType == "Alignment").Select(u => $"{u.Name}:{u.Spec.ActualValue.Value.ToString(_precision)}"));
+            return string.Join(",", pMeasure.Measurements.Where(u => u.MeasureType.StartsWith("Alignment")).Select(u => $"{u.Name}:{u.Spec.ActualValue.Value.ToString(_precision)}"));
         }
 
         private string GetMESSlantData(ProductionMeasurement pMeasure)
         {
-            return string.Join(",", pMeasure.Measurements.Where(u => u.MeasureType == "Slant").Select(u => $"{u.Name}:{u.Spec.ActualValue.Value.ToString(_precision)}"));
+            return string.Join(",", pMeasure.Measurements.Where(u => u.MeasureType.StartsWith("Slant")).Select(u => $"{u.Name}:{u.Spec.ActualValue.Value.ToString(_precision)}"));
+        }
+
+        private string GetNGKeys(ProductionMeasurement pMeasure)
+        {
+            string ngCodes = "";
+            Dictionary<string, List<string>> ngCodeDict = new Dictionary<string, List<string>>();
+
+            var ngList = pMeasure.Measurements.Where(m => m.Spec.MeasureResult != true).ToList();
+            if (ngList.Count == 0)
+                return "";
+
+            ngList.GroupBy(m => m.MeasureType).ToList().ForEach(g =>
+                  {
+                      var mType = Config.MeasureTypeCollection.FirstOrDefault(u => u.Code == g.Key);
+                      if (mType != null)
+                      {
+                          if (!ngCodeDict.ContainsKey(mType.NGCode))
+                          {
+                              ngCodeDict[mType.NGCode] = new List<string>();
+                          }
+
+                          g.ToList().ForEach(k =>
+                          {
+                              k.KeyUnitCollection.Select(kk => kk.Key).ToList().ForEach(key =>
+                              {
+                                  string uploadKeyCode = key;
+                                  var keyCodeMap = Config.KeyCodeMappingCollection.FirstOrDefault(kcm => kcm.Key == key);
+                                  if (keyCodeMap != null)
+                                  {
+                                      uploadKeyCode = keyCodeMap.KeyCode;
+                                  }
+
+                                  if (!ngCodeDict[mType.NGCode].Contains(uploadKeyCode))
+                                  {
+                                      ngCodeDict[mType.NGCode].Add(uploadKeyCode);
+                                  }
+                              });
+                          });
+                      }
+                  });
+
+            if (ngCodeDict.Count > 0)
+            {
+                ngCodes = string.Join(";", ngCodeDict.ToList().Select(u => $"{u.Key}:{string.Join(",", u.Value)}"));
+            }
+
+            return ngCodes;
         }
     }
 

--
Gitblit v1.8.0