| | |
| | | using System.Linq; |
| | | using System.Reflection; |
| | | using System.Text; |
| | | using System.Threading; |
| | | using System.Threading.Tasks; |
| | | using System.Windows.Forms; |
| | | |
| | | namespace Bro.M071.Process |
| | | { |
| | |
| | | { |
| | | 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) |
| | |
| | | //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 }; |
| | | var result = IncomingCheckMethod?.Invoke(IncomingCheckObj, paras).ToString(); |
| | | object[] paras = new object[] { barcode, Config.StationCode, Config.ProjectCode }; |
| | | |
| | | if (Config.IsEnableMESLog) |
| | | { |
| | | LogAsync(DateTime.Now, $"MES入料检测", JsonConvert.SerializeObject(paras)); |
| | | } |
| | | |
| | | string result = "-3"; |
| | | |
| | | int repeatTime = 3; |
| | | |
| | | do |
| | | { |
| | | try |
| | | { |
| | | result = IncomingCheckMethod?.Invoke(IncomingCheckObj, paras).ToString(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogAsync(DateTime.Now, $"{barcode}产品条码检测异常", ex.GetExceptionMessage()); |
| | | repeatTime--; |
| | | |
| | | Thread.Sleep(100); |
| | | result = "-3"; |
| | | } |
| | | } while (repeatTime > 0); |
| | | var mesReturn = (MESIncomingCheckReturn)int.Parse(result); |
| | | sw.Stop(); |
| | | LogAsync(DateTime.Now, $"{barcode}产品条码检测,{result}|{mesReturn.ToString()}", $"耗时:{sw.ElapsedMilliseconds}ms"); |
| | |
| | | //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(); |
| | |
| | | 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(); |
| | | string result = "-1"; |
| | | |
| | | int repeatTime = 3; |
| | | do |
| | | { |
| | | try |
| | | { |
| | | result = DataUploadMethod?.Invoke(DataUploadObj, paras).ToString(); |
| | | repeatTime = -1; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogAsync(DateTime.Now, $"{barcode}产品检测数据上传异常", ex.GetExceptionMessage()); |
| | | repeatTime--; |
| | | |
| | | Thread.Sleep(100); |
| | | result = "-1"; |
| | | } |
| | | } while (repeatTime > 0); |
| | | |
| | | var mesReturn = (MESUploadReturn)int.Parse(result); |
| | | sw.Stop(); |
| | | LogAsync(DateTime.Now, $"{barcode}产品检测数据上传,{result}|{mesReturn.ToString()}", $"耗时:{sw.ElapsedMilliseconds}ms"); |
| | | |
| | | OnCheckHintUpload?.Invoke("检测数据" + mesReturn.ToString(), mesReturn != MESUploadReturn.上传成功); |
| | | |
| | | if (mesReturn != MESUploadReturn.上传成功) |
| | | { |
| | | MessageBox.Show($"{barcode}产品数据上传失败,{mesReturn.ToString()}\r\n请检查网络连接或确认问题后重新检测", "上传异常", MessageBoxButtons.OK, MessageBoxIcon.Warning); |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | |