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.Device.GTSCard/GTSCardDriver.cs | 22 +- src/Bro.M071.Process/M071Process.cs | 161 ++++++++++++++++++++++ src/Bro.M071.Process/Bro.M071.Process.csproj | 4 src/Bro.M071.DBManager/MeasurementUnitResultManager.cs | 6 src/Bro.M071.Process/M071Config.cs | 6 src/Bro.M071.Process/M071Models.cs | 1 src/Bro.M071.DBManager/ExcelExportHelper.cs | 178 +++++++++++++----------- src/Bro.M071.Model/Model/MeasurementUnitResult.cs | 38 +++++ 8 files changed, 312 insertions(+), 104 deletions(-) diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs index 240c375..2d3d26e 100644 --- a/src/Bro.Device.GTSCard/GTSCardDriver.cs +++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs @@ -386,7 +386,7 @@ public override async Task<bool> SingleAxisMoving(MovingOption optionPara) { return await Task.Run(() => - { + { axisImmediatePauseHandleDict[optionPara.AxisIndex].WaitOne(); bool isSuccessAndStop = false; try @@ -458,7 +458,8 @@ { throw new Exception("杞�" + axisNum + "鑾峰彇瑙勫垝浣嶇疆寮傚父锛岄敊璇爜锛�" + ret); } - position = prfpos / IConfig.AxisVelocityRatio; + var AxisRatio = IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == axisNum) == null ? 1 : IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == axisNum).AxisRatio; + position = prfpos / AxisRatio; return position; } @@ -478,7 +479,8 @@ { throw new Exception("杞�" + axisNum + "鑾峰彇鐩爣浣嶇疆寮傚父锛岄敊璇爜锛�" + ret); } - position = pPos / IConfig.AxisVelocityRatio; + var AxisRatio = IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == axisNum) == null ? 1 : IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == axisNum).AxisRatio; + position = pPos / AxisRatio; return position; } } @@ -487,7 +489,7 @@ /// 鑾峰彇瑙勫垝閫熷害 /// </summary> /// <param name="axisNum">Axis number</param> - /// <returns></returns> + /// <returns>閫熷害鑴夊啿</returns> public double GetPrfVelocity(int axisNum) { double prfVel = 0; @@ -497,7 +499,6 @@ { throw new Exception("杞�" + axisNum + "鑾峰彇瑙勫垝閫熷害寮傚父锛岄敊璇爜锛�" + ret); } - prfVel = prfVel / IConfig.AxisVelocityRatio; return prfVel; } @@ -505,7 +506,7 @@ /// 鑾峰彇褰撳墠閫熷害 /// </summary> /// <param name="axisNum">Axis number</param> - /// <returns></returns> + /// <returns>閫熷害鑴夊啿</returns> public double GetVelocity(int axisNum) { double vel = 0; @@ -514,7 +515,6 @@ { throw new Exception("杞�" + axisNum + "鑾峰彇褰撳墠閫熷害寮傚父锛岄敊璇爜锛�" + ret); } - vel = vel / IConfig.AxisVelocityRatio; return vel; } @@ -599,11 +599,12 @@ int currentPosition = (int)GetPosition(optionPara.AxisIndex); int dPosition = optionPara.Destination + currentPosition; int timeout = optionPara.MovingTimeout; + var AxisRatio = IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == optionPara.AxisIndex) == null ? 1 : IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == optionPara.AxisIndex).AxisRatio; while (CurrentState == DeviceState.DSOpen) { //璁剧疆 杩愬姩鍙傛暟 isSuccessSetAxisParam = SetAxisParam(optionPara); - ret = GTSCardAPI.GT_SetPrfPos((short)IConfig.CardNum, (short)optionPara.AxisIndex, (int)(dPosition * IConfig.AxisVelocityRatio));// 璁剧疆瑙勫垝浣嶇疆 + ret = GTSCardAPI.GT_SetPrfPos((short)IConfig.CardNum, (short)optionPara.AxisIndex, (int)(dPosition * AxisRatio));// 璁剧疆瑙勫垝浣嶇疆 ret = GTSCardAPI.GT_Update((short)IConfig.CardNum, 1 << (optionPara.AxisIndex - 1));//鏇存柊杩愬姩 if (ret != (short)GTSRetCode.GRCRunOK) @@ -674,11 +675,12 @@ short ret = 0; bool isSuccessSetAxisParam = false; int timeout = optionPara.MovingTimeout; - while (CurrentState == DeviceState.DSOpen&&!_isPause) + var AxisRatio = IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == optionPara.AxisIndex) == null ? 1 : IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == optionPara.AxisIndex).AxisRatio; + while (CurrentState == DeviceState.DSOpen && !_isPause) { //璁剧疆 杩愬姩鍙傛暟 isSuccessSetAxisParam = SetAxisParam(optionPara); - ret = GTSCardAPI.GT_SetPrfPos((short)IConfig.CardNum, (short)optionPara.AxisIndex, (int)(optionPara.Destination * IConfig.AxisVelocityRatio));// 璁剧疆瑙勫垝浣嶇疆 + ret = GTSCardAPI.GT_SetPrfPos((short)IConfig.CardNum, (short)optionPara.AxisIndex, (int)(optionPara.Destination * AxisRatio));// 璁剧疆瑙勫垝浣嶇疆 ret = GTSCardAPI.GT_Update((short)IConfig.CardNum, 1 << (optionPara.AxisIndex - 1));//鏇存柊杩愬姩 if (ret != (short)GTSRetCode.GRCRunOK) diff --git a/src/Bro.M071.DBManager/ExcelExportHelper.cs b/src/Bro.M071.DBManager/ExcelExportHelper.cs index b894e68..0ea0c16 100644 --- a/src/Bro.M071.DBManager/ExcelExportHelper.cs +++ b/src/Bro.M071.DBManager/ExcelExportHelper.cs @@ -8,6 +8,19 @@ namespace Bro.M071.DBManager { + + public class ExcelExportSet + { + public List<string> Worksheets { get; set; } + + /// <summary> + /// Key锛� Worksheet鐨勫悕绉� Value:Worksheet瀵瑰簲鐨勫垪鍚嶉泦鍚�(key 涓鸿瀵煎嚭鐨勫垪鍚� value 涓哄鍑哄悗鏄剧ず鐨勫垪鍚�) + /// </summary> + public Dictionary<string, Dictionary<string, string>> WorksheetColumns { get; set; } + public Dictionary<string, DataTable> WorksheetDataTable { get; set; } + + } + /// <summary> /// Excel瀵煎嚭甯姪绫� /// </summary> @@ -20,21 +33,27 @@ /// <typeparam name="T"></typeparam> /// <param name="data"></param> /// <returns></returns> - public static DataTable ListToDataTable<T>(List<T> data) + public static DataTable ListToDataTable<T>(List<T> data, Dictionary<string, string> worksheetColumns) { PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T)); DataTable dataTable = new DataTable(); - for (int i = 0; i < properties.Count; i++) + Dictionary<string, string> tempColumns = new Dictionary<string, string>(); + foreach (var column in worksheetColumns) { - PropertyDescriptor property = properties[i]; - dataTable.Columns.Add(property.Name, Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType); + PropertyDescriptor property = properties.Find(column.Key, true); + if (property != null) + { + dataTable.Columns.Add(column.Value, Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType); + tempColumns[column.Key] = column.Value; + } } - object[] values = new object[properties.Count]; + object[] values = new object[tempColumns.Count]; foreach (T item in data) { - for (int i = 0; i < values.Length; i++) + for (int i = 0; i < tempColumns.Count; i++) { - values[i] = properties[i].GetValue(item); + PropertyDescriptor property = properties.Find(tempColumns.ElementAt(i).Key, true); + values[i] = property.GetValue(item); } dataTable.Rows.Add(values); } @@ -45,99 +64,94 @@ /// 瀵煎嚭Excel /// </summary> /// <param name="dataTable">鏁版嵁婧�</param> - /// <param name="heading">宸ヤ綔绨縒orksheet</param> + /// <param name="worksheet">宸ヤ綔绨縒orksheet</param> /// <param name="showSrNo">//鏄惁鏄剧ず琛岀紪鍙�</param> /// <param name="columnsToTake">瑕佸鍑虹殑鍒�</param> /// <returns></returns> - public static byte[] ExportExcel(DataTable dataTable, string heading = "", bool showSrNo = false, params string[] columnsToTake) + public static byte[] ExportExcel(ExcelExportSet excelExportDto, bool showSrNo = false) { - byte[] result; + byte[] result = null; using (ExcelPackage package = new ExcelPackage()) { - ExcelWorksheet workSheet = package.Workbook.Worksheets.Add($"{heading}Data"); - int startRowFrom = string.IsNullOrEmpty(heading) ? 1 : 3; //寮�濮嬬殑琛� - //鏄惁鏄剧ず琛岀紪鍙� - if (showSrNo) + foreach (var worksheet in excelExportDto.Worksheets) { - DataColumn dataColumn = dataTable.Columns.Add("#", typeof(int)); - dataColumn.SetOrdinal(0); - int index = 1; - foreach (DataRow item in dataTable.Rows) + var dataTable = excelExportDto.WorksheetDataTable[worksheet]; + ExcelWorksheet workSheet = package.Workbook.Worksheets.Add($"{worksheet}"); + int startRowFrom = string.IsNullOrEmpty(worksheet) ? 1 : 3; //寮�濮嬬殑琛� + //鏄惁鏄剧ず琛岀紪鍙� + if (showSrNo) { - item[0] = index; - index++; + DataColumn dataColumn = dataTable.Columns.Add("#", typeof(int)); + dataColumn.SetOrdinal(0); + int index = 1; + foreach (DataRow item in dataTable.Rows) + { + item[0] = index; + index++; + } } - } - //Add Content Into the Excel File - workSheet.Cells["A" + startRowFrom].LoadFromDataTable(dataTable, true); - // autofit width of cells with small content - int columnIndex = 1; - foreach (DataColumn item in dataTable.Columns) - { - ExcelRange columnCells = workSheet.Cells[workSheet.Dimension.Start.Row, columnIndex, workSheet.Dimension.End.Row, columnIndex]; - int maxLength = columnCells.Max(cell => cell.Value.ToString().Count()); - if (maxLength < 150) + //Add Content Into the Excel File + workSheet.Cells["A" + startRowFrom].LoadFromDataTable(dataTable, true); + // autofit width of cells with small content + int columnIndex = 1; + foreach (DataColumn item in dataTable.Columns) { - workSheet.Column(columnIndex).AutoFit(); + ExcelRange columnCells = workSheet.Cells[workSheet.Dimension.Start.Row, columnIndex, workSheet.Dimension.End.Row, columnIndex]; + int maxLength = columnCells.Max(cell => cell.Value.ToString().Count()); + if (maxLength < 150) + { + workSheet.Column(columnIndex).AutoFit(); + } + columnIndex++; } - columnIndex++; - } - // format header - bold, yellow on black - using (ExcelRange r = workSheet.Cells[startRowFrom, 1, startRowFrom, dataTable.Columns.Count]) - { - r.Style.Font.Color.SetColor(System.Drawing.Color.White); - r.Style.Font.Bold = true; - r.Style.Fill.PatternType = ExcelFillStyle.Solid; - r.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#1fb5ad")); - } - // format cells - add borders - using (ExcelRange r = workSheet.Cells[startRowFrom + 1, 1, startRowFrom + dataTable.Rows.Count, dataTable.Columns.Count]) - { - r.Style.Border.Top.Style = ExcelBorderStyle.Thin; - r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; - r.Style.Border.Left.Style = ExcelBorderStyle.Thin; - r.Style.Border.Right.Style = ExcelBorderStyle.Thin; - r.Style.Border.Top.Color.SetColor(System.Drawing.Color.Black); - r.Style.Border.Bottom.Color.SetColor(System.Drawing.Color.Black); - r.Style.Border.Left.Color.SetColor(System.Drawing.Color.Black); - r.Style.Border.Right.Color.SetColor(System.Drawing.Color.Black); - } - // removed ignored columns - for (int i = dataTable.Columns.Count - 1; i >= 0; i--) - { - if (i == 0 && showSrNo) + // format header - bold, yellow on black + using (ExcelRange r = workSheet.Cells[startRowFrom, 1, startRowFrom, dataTable.Columns.Count]) { - continue; + r.Style.Font.Color.SetColor(System.Drawing.Color.White); + r.Style.Font.Bold = true; + r.Style.Fill.PatternType = ExcelFillStyle.Solid; + r.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#1fb5ad")); } - if (!columnsToTake.Contains(dataTable.Columns[i].ColumnName)) + // format cells - add borders + using (ExcelRange r = workSheet.Cells[startRowFrom + 1, 1, startRowFrom + dataTable.Rows.Count, dataTable.Columns.Count]) { - workSheet.DeleteColumn(i + 1); + r.Style.Border.Top.Style = ExcelBorderStyle.Thin; + r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; + r.Style.Border.Left.Style = ExcelBorderStyle.Thin; + r.Style.Border.Right.Style = ExcelBorderStyle.Thin; + r.Style.Border.Top.Color.SetColor(System.Drawing.Color.Black); + r.Style.Border.Bottom.Color.SetColor(System.Drawing.Color.Black); + r.Style.Border.Left.Color.SetColor(System.Drawing.Color.Black); + r.Style.Border.Right.Color.SetColor(System.Drawing.Color.Black); } + if (!string.IsNullOrEmpty(worksheet)) + { + workSheet.Cells["A1"].Value = worksheet; + workSheet.Cells["A1"].Style.Font.Size = 20; + workSheet.InsertColumn(1, 1); + workSheet.InsertRow(1, 1); + workSheet.Column(1).Width = 5; + } + result = package.GetAsByteArray(); } - if (!string.IsNullOrEmpty(heading)) - { - workSheet.Cells["A1"].Value = heading; - workSheet.Cells["A1"].Style.Font.Size = 20; - workSheet.InsertColumn(1, 1); - workSheet.InsertRow(1, 1); - workSheet.Column(1).Width = 5; - } - result = package.GetAsByteArray(); } return result; } - /// <summary> - /// 瀵煎嚭Excel - /// </summary> - /// <typeparam name="T"></typeparam> - /// <param name="data"></param> - /// <param name="heading"></param> - /// <param name="isShowSlNo"></param> - /// <param name="columnsToTake"></param> - /// <returns></returns> - public static byte[] ExportExcel<T>(List<T> data, string heading = "", bool isShowSlNo = false, params string[] columnsToTake) - { - return ExportExcel(ListToDataTable(data), heading, isShowSlNo, columnsToTake); - } + + ///// <summary> + ///// 瀵煎嚭Excel + ///// </summary> + ///// <typeparam name="T"></typeparam> + ///// <param name="data"></param> + ///// <param name="heading"></param> + ///// <param name="isShowSlNo"></param> + ///// <param name="columnsToTake"></param> + ///// <returns></returns> + //public static byte[] ExportExcel<T>(List<T> data, string heading = "", bool isShowSlNo = false, params string[] columnsToTake) + //{ + // ExcelExportSet excelExport = new ExcelExportSet(); + // excelExport. + // return ExportExcel(ListToDataTable(data), heading, isShowSlNo, columnsToTake); + //} } } diff --git a/src/Bro.M071.DBManager/MeasurementUnitResultManager.cs b/src/Bro.M071.DBManager/MeasurementUnitResultManager.cs index 346af64..be0bb9e 100644 --- a/src/Bro.M071.DBManager/MeasurementUnitResultManager.cs +++ b/src/Bro.M071.DBManager/MeasurementUnitResultManager.cs @@ -72,11 +72,11 @@ //into pmList select new MeasurementUnitResult_DTO { - ProductionMeasurementRecord= productionMeasurementRecords, - MeasurementUnitResult= measurementUnitResult + ProductionCode = productionMeasurementRecords.ProductionCode, + ProductionBarcode = productionMeasurementRecords.ProductionBarcode }; - var pageList = query.OrderBy(u => u.ProductionMeasurementRecord.OperationStartTime).ToPagedList(request); + var pageList = query.OrderBy(u => u.CREATE_TIME).ToPagedList(request); request.TotalNum = mList.Count(); return pageList; } diff --git a/src/Bro.M071.Model/Model/MeasurementUnitResult.cs b/src/Bro.M071.Model/Model/MeasurementUnitResult.cs index 3d39b4c..62898f4 100644 --- a/src/Bro.M071.Model/Model/MeasurementUnitResult.cs +++ b/src/Bro.M071.Model/Model/MeasurementUnitResult.cs @@ -1,5 +1,6 @@ 锘� using System; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace Bro.M071.Model.Model @@ -68,17 +69,48 @@ public string MeasurementResult { get; set; } } - public class MeasurementUnitResult_DTO + public class MeasurementUnitResult_DTO : MeasurementUnitResult { + //浜у搧鐩稿叧 /// <summary> - /// 浜у搧璁板綍 + /// 浜у搧缂栫爜 /// </summary> + public string ProductionCode { get; set; } + + /// <summary> + /// 浜у搧鏉$爜 + /// </summary> + public string ProductionBarcode { get; set; } + + + } + + public class ProductionMeasurementUnitResultAndKeyUnitDataSet + { + public ProductionMeasurementRecords ProductionMeasurementRecord { get; set; } + + /// <summary> + /// 鍏崇郴鏁版嵁 + /// </summary> + public List<MeasurementAndKeyDataRelation> MeasurementAndKeyDataRelationList{ get; set; } /// <summary> /// 妫�娴嬬粨鏋� /// </summary> - public MeasurementUnitResult MeasurementUnitResult { get; set; } + public List<MeasurementUnitResult> MeasurementUnitResultList { get; set; } + + /// <summary> + /// 鍘熷鏁版嵁 + /// </summary> + public List<KeyUnitData> KeyUnitDataList { get; set; } + + public ProductionMeasurementUnitResultAndKeyUnitDataSet() + { + ProductionMeasurementRecord = new ProductionMeasurementRecords(); + MeasurementUnitResultList = new List<MeasurementUnitResult>(); + KeyUnitDataList = new List<KeyUnitData>(); + } } diff --git a/src/Bro.M071.Process/Bro.M071.Process.csproj b/src/Bro.M071.Process/Bro.M071.Process.csproj index eb681d3..e8c6f29 100644 --- a/src/Bro.M071.Process/Bro.M071.Process.csproj +++ b/src/Bro.M071.Process/Bro.M071.Process.csproj @@ -179,6 +179,10 @@ <Project>{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}</Project> <Name>Bro.Common.Model</Name> </ProjectReference> + <ProjectReference Include="..\Bro.M071.DBManager\Bro.M071.DBManager.csproj"> + <Project>{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}</Project> + <Name>Bro.M071.DBManager</Name> + </ProjectReference> <ProjectReference Include="..\Bro.M071.Model\Bro.M071.Model.csproj"> <Project>{AD645C48-5811-4B1E-B81F-D35D5E6B577F}</Project> <Name>Bro.M071.Model</Name> diff --git a/src/Bro.M071.Process/M071Config.cs b/src/Bro.M071.Process/M071Config.cs index 9f8559f..f2b54c1 100644 --- a/src/Bro.M071.Process/M071Config.cs +++ b/src/Bro.M071.Process/M071Config.cs @@ -67,6 +67,12 @@ [Editor(typeof(ComplexCollectionEditor<MeasurementUnit>), typeof(UITypeEditor))] public List<MeasurementUnit> MeasurementUnitCollection { get; set; } = new List<MeasurementUnit>(); + [Category("妫�娴嬭缃�")] + [DisplayName("缁撴灉鏁版嵁淇濆瓨璺緞")] + [Description("妫�娴嬬粨鏋滄暟鎹繚瀛樿矾寰�")] + [Editor(typeof(FoldDialogEditor), typeof(UITypeEditor))] + public string ResultDataSaveFolder { get; set; } = ""; + [Category("鍥剧墖淇濆瓨閰嶇疆")] [Description("鍗曢敭鍥剧墖淇濆瓨閰嶇疆")] [TypeConverter(typeof(ComplexObjectConvert))] diff --git a/src/Bro.M071.Process/M071Models.cs b/src/Bro.M071.Process/M071Models.cs index bd98beb..f2c588f 100644 --- a/src/Bro.M071.Process/M071Models.cs +++ b/src/Bro.M071.Process/M071Models.cs @@ -204,6 +204,7 @@ public class ProductionMeasurement : INotifyPropertyChanged, IDisposable { public string Barcode; + public string PResult; public List<MeasurementUnit> Measurements = new List<MeasurementUnit>(); 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