领胜LDS 键盘AOI检测项目
patrick.xu
2021-02-20 78289c64a16dd02cc9fec595bf758a9e30a30926
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();
@@ -190,15 +196,19 @@
                Config.IsDisableMultipleCheckTimes,
                Config.ProjectCode,
                pMeasure.Barcode,
                checkTime.ToString("yyyy-MM-dd HH:mm:ss"),
                checkTime,
                Config.StationCode,
                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, $"{pMeasure.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;
        }
    }