From 6caa156ba8be9728b4cb67c7c7be326b0316f773 Mon Sep 17 00:00:00 2001 From: wells.liu <wells.liu@broconcentric.com> Date: 星期四, 09 七月 2020 17:22:44 +0800 Subject: [PATCH] 板卡+数据库保存+excel导出 --- src/Bro.M071.Process/M071Process.cs | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 155 insertions(+), 6 deletions(-) diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs index 8f08ba9..1dea3b9 100644 --- a/src/Bro.M071.Process/M071Process.cs +++ b/src/Bro.M071.Process/M071Process.cs @@ -2,7 +2,9 @@ using Bro.Common.Helper; using Bro.Common.Interface; using Bro.Common.Model; +using Bro.M071.DBManager; using Bro.M071.Model; +using Bro.M071.Model.Model; using Bro.Process; using HalconDotNet; using System; @@ -58,8 +60,8 @@ private void InitialSetting() { - ////鏁版嵁搴撹縼绉绘鏌� - //DatabaseInitialize.Initialize(); + //鏁版嵁搴撹縼绉绘鏌� + DatabaseInitialize.Initialize(); MotionCardSettingCheck(); @@ -364,19 +366,23 @@ pMeasure.EndTime = DateTime.Now; bool pResult = pMeasure.Measurements.All(u => u.Spec.MeasureResult == true); + pMeasure.PResult = pResult ? "OK" : "NG"; OnUpdateResult?.Invoke(DateTime.Now, pResult ? 1 : 0); OnUpdateCT?.Invoke((float)(pMeasure.EndTime.Value - pMeasure.StartTime.Value).TotalSeconds); - LogAsync(DateTime.Now, $"{pMeasure.Barcode} 妫�娴嬪畬鎴愶紝缁撴灉 {(pResult ? "OK" : "NG")}", ""); + LogAsync(DateTime.Now, $"{pMeasure.Barcode} 妫�娴嬪畬鎴愶紝缁撴灉 {pMeasure.PResult}", ""); if (MachineState == MachineState.Running) MachineState = MachineState.Ready; + var measurementUnitResultAndKeyUnitDataSet = GetMeasurementUnitResultAndKeyUnitData(pMeasure); + //MES杈撳嚭 todo - //Excel鎶ヨ〃杈撳嚭 todo - - //鏁版嵁搴撲繚瀛� todo + //Excel鎶ヨ〃杈撳嚭 锛堝崟涓骇鍝佺殑excel瀵煎嚭锛� + ExportProductionExcel(measurementUnitResultAndKeyUnitDataSet); + //鏁版嵁搴撲繚瀛� + SaveProductionData(measurementUnitResultAndKeyUnitDataSet); SaveWholeImage(pMeasure); @@ -385,6 +391,149 @@ } } + KeyUnitDataManager keyUnitDataManager = new KeyUnitDataManager(); + MeasurementUnitResultManager measurementUnitResultManager = new MeasurementUnitResultManager(); + MeasurementAndKeyDataRelationManager measurementAndKeyDataRelationManager = new MeasurementAndKeyDataRelationManager(); + ProductionMeasurementRecordsManager productionMeasurementRecordsManager = new ProductionMeasurementRecordsManager(); + + static object dataSaveLock = new object(); + + private async void SaveProductionData(ProductionMeasurementUnitResultAndKeyUnitDataSet measurementUnitResultAndKeyUnitDataSet) + { + await Task.Run(() => + { + try + { + lock (dataSaveLock) + { + // 鑾峰彇 浜у搧鏁版嵁 骞朵繚瀛� + var productionMeasurementRecords = measurementUnitResultAndKeyUnitDataSet.ProductionMeasurementRecord; + productionMeasurementRecordsManager.CreateModel(productionMeasurementRecords); + + // 鑾峰彇 鍘熷鏁版嵁 骞朵繚瀛� + var keyUnitDatas = measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList; + keyUnitDataManager.BatchAddKeyUnitData(keyUnitDatas); + + // 鑾峰彇 妫�娴嬬粨鏋滄暟鎹� 骞朵繚瀛� + var measurementUnitResults = measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList; + measurementUnitResultManager.BatchAddMeasurementUnitResult(measurementUnitResults); + + // 鑾峰彇 鍏崇郴鏁版嵁骞朵繚瀛� + var measurementAndKeyDataRelationList = measurementUnitResultAndKeyUnitDataSet.MeasurementAndKeyDataRelationList; + measurementAndKeyDataRelationManager.BatchAddMeasurementAndKeyDataRelation(measurementAndKeyDataRelationList); + } + } + catch (Exception ex) + { + LogAsync(DateTime.Now, "鏁版嵁淇濆瓨寮傚父", ex.GetExceptionMessage()); + } + }); + } + + private ProductionMeasurementUnitResultAndKeyUnitDataSet GetMeasurementUnitResultAndKeyUnitData(ProductionMeasurement pData) + { + ProductionMeasurementUnitResultAndKeyUnitDataSet measurementUnitResultAndKeyUnitDataSet = new ProductionMeasurementUnitResultAndKeyUnitDataSet(); + + try + { + + //浜у搧鏁版嵁 + ProductionMeasurementRecords productionMeasurementRecords = new ProductionMeasurementRecords(); + //鍏崇郴鏁版嵁 + List<MeasurementAndKeyDataRelation> measurementAndKeyDataRelationList = new List<MeasurementAndKeyDataRelation>(); + //鍘熷鏁版嵁 + List<KeyUnitData> keyUnitDatas = new List<KeyUnitData>(); + // 鍗曚釜浜у搧鐨勬祴閲忔眹鎬� + List<MeasurementUnitResult> measurementUnitResults = new List<MeasurementUnitResult>(); + + productionMeasurementRecords.ProductionBarcode = pData.Barcode; + productionMeasurementRecords.ProductionCode = ProductionCode; + productionMeasurementRecords.ProductionResult = pData.PResult; + productionMeasurementRecords.OperationStartTime = pData.StartTime.GetValueOrDefault(); + productionMeasurementRecords.OperationEndTime = pData.EndTime.GetValueOrDefault(); + + measurementUnitResultAndKeyUnitDataSet.ProductionMeasurementRecord = productionMeasurementRecords; + + foreach (var MeasurementUnitResult in pData.Measurements)//鑾峰彇鍒板崟涓祴閲忛」缁撴灉 + { + MeasurementUnitResult measurementUnitResult = new MeasurementUnitResult(); + measurementUnitResult.ProductionMeasurementRecordsId = productionMeasurementRecords.ID; + measurementUnitResult.MeasurementName = MeasurementUnitResult.Name; + measurementUnitResult.MeasurementType = MeasurementUnitResult.MeasureType; + measurementUnitResult.MeasurementValue = ""; + measurementUnitResult.MeasurementResult = MeasurementUnitResult.Spec.MeasureResult.Value ? "OK" : "NG"; + + measurementUnitResults.Add(measurementUnitResult); + + foreach (var keyUnit in MeasurementUnitResult.KeyUnitCollection)//鑾峰彇鍗曚釜閿殑娴嬮噺缁撴灉 + { + foreach (var keyValue in keyUnit.MeasureValueDict)//鑾峰彇鍗曚釜閿殑鍗曚釜娴嬮噺item 缁撴灉 + { + KeyUnitData keyUnitData = new KeyUnitData(); + keyUnitData.Key = keyUnit.Key; + keyUnitData.MeasurementItem = keyValue.Key; + keyUnitData.ItemValue = keyValue.Value.ToString(); + keyUnitDatas.Add(keyUnitData); + + MeasurementAndKeyDataRelation measurementAndKeyDataRelation = new MeasurementAndKeyDataRelation(); + measurementAndKeyDataRelation.MeasurementUnitResultId = measurementUnitResult.ID; + measurementAndKeyDataRelation.KeyUnitDataId = keyUnitData.ID; + measurementAndKeyDataRelationList.Add(measurementAndKeyDataRelation); + + } + } + } + measurementUnitResultAndKeyUnitDataSet.ProductionMeasurementRecord = productionMeasurementRecords; + measurementUnitResultAndKeyUnitDataSet.MeasurementAndKeyDataRelationList = measurementAndKeyDataRelationList; + measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList = keyUnitDatas; + measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList = measurementUnitResults; + } + catch (Exception ex) + { + LogAsync(DateTime.Now, "鏁版嵁鑾峰彇寮傚父", ex.GetExceptionMessage()); + } + return measurementUnitResultAndKeyUnitDataSet; + } + + private async void ExportProductionExcel(ProductionMeasurementUnitResultAndKeyUnitDataSet measurementUnitResultAndKeyUnitDataSet) + { + await Task.Run(() => + { + ExcelExportSet excelExportDto = new ExcelExportSet(); + excelExportDto.Worksheets = new List<string>() { "鍘熷鏁版嵁", "妫�娴嬬粨鏋�" }; + var keyUnitColumns = new Dictionary<string, string>() + { + {"Key", "閿�"}, + {"MeasurementItem", "妫�娴嬮」"}, + {"ItemValue", "妫�娴嬪��"} + }; + var measurementUnitResultColumns = new Dictionary<string, string>() + { + {"MeasurementName", "妫�娴嬪悕绉�"}, + {"MeasurementType", "妫�娴嬬被鍨�"}, + {"MeasurementValue", "妫�娴嬪��"}, + {"MeasurementResult", "妫�娴嬬粨鏋�"}, + }; + excelExportDto.WorksheetColumns[excelExportDto.Worksheets[0]] = keyUnitColumns; + excelExportDto.WorksheetColumns[excelExportDto.Worksheets[1]] = measurementUnitResultColumns; + + excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[0]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList, keyUnitColumns); + excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[1]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList, measurementUnitResultColumns); ; + + byte[] filecontent = ExcelExportHelper.ExportExcel(excelExportDto, false); + string dir = Path.Combine(Config.ImageSaveFolder, DateTime.Now.ToString("yyyyMMdd")); + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + + FileStream fs = new FileStream(Path.Combine(dir, $"{measurementUnitResultAndKeyUnitDataSet.ProductionMeasurementRecord.ProductionBarcode}_{DateTime.Now.ToString("HHmmss")}.xlsx"), FileMode.Create, FileAccess.Write); + fs.Write(filecontent, 0, filecontent.Length); + fs.Flush(); + fs.Close(); + }); + } + #region 鍥惧儚淇濆瓨 private void SaveWholeImage(ProductionMeasurement pMeasure) { -- Gitblit v1.8.0