From 30458c0bca8066d98ca901b5065832a44a7e970e Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期四, 16 七月 2020 15:47:22 +0800
Subject: [PATCH] 测量结果 查询+导出功能

---
 src/Bro.UI.Config/App.config                           |    1 
 src/Bro.M071.Process/UI/M071_DataForm.resx             |   39 +++
 src/Bro.M071.Model/Model/KeyUnitData.cs                |   37 +++
 src/Bro.M071.Process/UI/M071_DataForm.cs               |  219 ++++++++++++++++++++-
 src/Bro.M071.DBManager/MeasurementUnitResultManager.cs |   87 ++++++++
 src/Bro.M071.Process/UI/M071_DataForm.Designer.cs      |  175 +++++++++--------
 src/Bro.M071.Model/Model/MeasurementUnitResult.cs      |   28 ++
 7 files changed, 486 insertions(+), 100 deletions(-)

diff --git a/src/Bro.M071.DBManager/MeasurementUnitResultManager.cs b/src/Bro.M071.DBManager/MeasurementUnitResultManager.cs
index 0d49ead..29a5303 100644
--- a/src/Bro.M071.DBManager/MeasurementUnitResultManager.cs
+++ b/src/Bro.M071.DBManager/MeasurementUnitResultManager.cs
@@ -1,6 +1,7 @@
 锘縰sing Bro.Common.Helper;
 using Bro.M071.Model;
 using Bro.M071.Model.Model;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
 using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -75,11 +76,11 @@
                                 ProductionCode = productionMeasurementRecords.ProductionCode,
                                 ProductionBarcode = productionMeasurementRecords.ProductionBarcode,
                                 ProductionMeasurementRecordsId = productionMeasurementRecords.ID,
-                                OperationStartTime= productionMeasurementRecords.OperationStartTime,
+                                OperationStartTime = productionMeasurementRecords.OperationStartTime,
                                 OperationEndTime = productionMeasurementRecords.OperationEndTime,
 
-                                Id= measurementUnitResult.ID,
-                                MeasurementName= measurementUnitResult.MeasurementName,
+                                Id = measurementUnitResult.ID,
+                                MeasurementName = measurementUnitResult.MeasurementName,
                                 MeasurementType = measurementUnitResult.MeasurementType,
                                 MeasurementValue = measurementUnitResult.MeasurementValue,
                                 MeasurementResult = measurementUnitResult.MeasurementResult
@@ -90,6 +91,86 @@
             }
         }
 
+
+        public ProductionMeasurementUnitResultExportDataSet GetProductionMeasurementUnitResultExportDataSet(MeasurementUnitResultRequest request)
+        {
+            ProductionMeasurementUnitResultExportDataSet productionMeasurementUnitResultExportDataSet = new ProductionMeasurementUnitResultExportDataSet();
+            using (DBModel context = new DBModel())
+            {
+                var mList = context.MeasurementUnitResult.Where(u => u.IS_DELETED == 0);
+                var pList = context.ProductionMeasurementRecords.Where(u => u.IS_DELETED == 0);
+                var kList = context.KeyUnitData.Where(u => u.IS_DELETED == 0);
+
+                if (!string.IsNullOrWhiteSpace(request.ProductionBarcode))
+                {
+                    pList = pList.Where(u => u.ProductionBarcode.Contains(request.ProductionBarcode));
+                }
+                if (!string.IsNullOrWhiteSpace(request.ProductionCode))
+                {
+                    pList = pList.Where(u => u.ProductionCode.Contains(request.ProductionCode));
+                }
+                if (request.StartTime != null)
+                {
+                    pList = pList.Where(u => u.OperationStartTime >= request.StartTime);
+                }
+                if (request.EndTime != null)
+                {
+                    pList = pList.Where(u => u.OperationStartTime <= request.EndTime);
+                }
+
+                //mList
+                if (!string.IsNullOrWhiteSpace(request.MeasurementName))
+                {
+                    mList = mList.Where(u => u.MeasurementName.Contains(request.MeasurementName));
+                }
+                if (!string.IsNullOrWhiteSpace(request.MeasurementResult))
+                {
+                    mList = mList.Where(u => u.MeasurementResult == request.MeasurementResult);
+                }
+                if (!string.IsNullOrWhiteSpace(request.MeasurementType))
+                {
+                    mList = mList.Where(u => u.MeasurementType == request.MeasurementType);
+                }
+
+                productionMeasurementUnitResultExportDataSet.ProductionMeasurementRecordList = pList.ToList();
+                var measurementUnitResults = from productionMeasurementRecords in pList
+                                             join measurementUnitResult in mList on productionMeasurementRecords.ID equals measurementUnitResult.ProductionMeasurementRecordsId
+                                             select new MeasurementUnitResult_DTO
+                                             {
+                                                 ProductionCode = productionMeasurementRecords.ProductionCode,
+                                                 ProductionBarcode = productionMeasurementRecords.ProductionBarcode,
+                                                 ProductionMeasurementRecordsId = productionMeasurementRecords.ID,
+                                                 OperationStartTime = productionMeasurementRecords.OperationStartTime,
+                                                 OperationEndTime = productionMeasurementRecords.OperationEndTime,
+
+                                                 Id = measurementUnitResult.ID,
+                                                 MeasurementName = measurementUnitResult.MeasurementName,
+                                                 MeasurementType = measurementUnitResult.MeasurementType,
+                                                 MeasurementValue = measurementUnitResult.MeasurementValue,
+                                                 MeasurementResult = measurementUnitResult.MeasurementResult
+                                             };
+
+                productionMeasurementUnitResultExportDataSet.MeasurementUnitResultList = measurementUnitResults.ToList();
+
+                var keyUnitDataQuery = from productionMeasurementRecords in pList
+                                       join keyUnitData in kList on productionMeasurementRecords.ID equals
+                                       keyUnitData.ProductionMeasurementRecordsId
+                                       select new KeyUnitData_DTO
+                                       {
+                                           ProductionCode = productionMeasurementRecords.ProductionCode,
+                                           ProductionBarcode = productionMeasurementRecords.ProductionBarcode,
+                                           ProductionMeasurementRecordsId = productionMeasurementRecords.ID,
+
+                                           Id = keyUnitData.ID,
+                                           Key = keyUnitData.Key,
+                                           MeasurementItem = keyUnitData.MeasurementItem,
+                                           ItemValue = keyUnitData.ItemValue,
+                                       };
+                productionMeasurementUnitResultExportDataSet.KeyUnitDataList = keyUnitDataQuery.ToList();
+
+                return productionMeasurementUnitResultExportDataSet;
+            }
+        }
         public void BatchAddMeasurementUnitResult(List<MeasurementUnitResult> records)
         {
             try
diff --git a/src/Bro.M071.Model/Model/KeyUnitData.cs b/src/Bro.M071.Model/Model/KeyUnitData.cs
index b583e78..3c58fe3 100644
--- a/src/Bro.M071.Model/Model/KeyUnitData.cs
+++ b/src/Bro.M071.Model/Model/KeyUnitData.cs
@@ -34,6 +34,11 @@
         [StringLength(64)]
         public string ItemValue { get; set; }
 
+        /// <summary>
+        /// 浜у搧缂栫爜
+        /// </summary>
+        [NotMapped]
+        public string ProductionCode { get; set; }
         [NotMapped]
         public string ProductionBarcode { get; set; }
     }
@@ -42,4 +47,36 @@
     {
     }
 
+    public class KeyUnitData_DTO
+    {
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 浜у搧娴嬮噺璁板綍Id
+        /// </summary>
+        public string ProductionMeasurementRecordsId { get; set; }
+
+        /// <summary>
+        /// 閿崟鍏�
+        /// </summary>
+        public string Key { get; set; }
+
+        /// <summary>
+        /// 妫�娴嬮」
+        /// </summary>
+        public string MeasurementItem { get; set; }
+
+        /// <summary>
+        /// 璇ラ敭 妫�娴嬮」 鐨勫��
+        /// </summary>
+        public string ItemValue { get; set; }
+
+        /// <summary>
+        /// 浜у搧缂栫爜
+        /// </summary>
+        public string ProductionCode { get; set; }
+
+        public string ProductionBarcode { get; set; }
+    }
+
 }
diff --git a/src/Bro.M071.Model/Model/MeasurementUnitResult.cs b/src/Bro.M071.Model/Model/MeasurementUnitResult.cs
index 3ae292f..881a51a 100644
--- a/src/Bro.M071.Model/Model/MeasurementUnitResult.cs
+++ b/src/Bro.M071.Model/Model/MeasurementUnitResult.cs
@@ -110,6 +110,34 @@
         }
     }
 
+    public class ProductionMeasurementUnitResultExportDataSet
+    {
+
+        public List<ProductionMeasurementRecords> ProductionMeasurementRecordList { get; set; }
+
+        ///// <summary>
+        ///// 鍏崇郴鏁版嵁
+        ///// </summary>
+        //public List<MeasurementAndKeyDataRelation> MeasurementAndKeyDataRelationList { get; set; }
+
+        /// <summary>
+        /// 妫�娴嬬粨鏋�
+        /// </summary>
+        public List<MeasurementUnitResult_DTO> MeasurementUnitResultList { get; set; }
+
+        /// <summary>
+        /// 鍘熷鏁版嵁
+        /// </summary>
+        public List<KeyUnitData_DTO> KeyUnitDataList { get; set; }
+
+        public ProductionMeasurementUnitResultExportDataSet()
+        {
+            ProductionMeasurementRecordList = new List<ProductionMeasurementRecords>();
+            MeasurementUnitResultList = new List<MeasurementUnitResult_DTO>();
+            KeyUnitDataList = new List<KeyUnitData_DTO>();
+        }
+    }
+
     /// <summary>
     /// MeasurementUnitResult_DTO 鏁版嵁搴撴煡璇娇鐢�
     /// </summary>
diff --git a/src/Bro.M071.Process/UI/M071_DataForm.Designer.cs b/src/Bro.M071.Process/UI/M071_DataForm.Designer.cs
index 97d12a0..b637a0b 100644
--- a/src/Bro.M071.Process/UI/M071_DataForm.Designer.cs
+++ b/src/Bro.M071.Process/UI/M071_DataForm.Designer.cs
@@ -28,10 +28,10 @@
         /// </summary>
         private void InitializeComponent()
         {
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle45 = new System.Windows.Forms.DataGridViewCellStyle();
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle46 = new System.Windows.Forms.DataGridViewCellStyle();
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle47 = new System.Windows.Forms.DataGridViewCellStyle();
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle48 = new System.Windows.Forms.DataGridViewCellStyle();
             this.tabControl1 = new System.Windows.Forms.TabControl();
             this.tabPage1 = new System.Windows.Forms.TabPage();
             this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
@@ -72,6 +72,14 @@
             this.buttonToBeforePage_MR = new System.Windows.Forms.Button();
             this.buttonToFirstPage_MR = new System.Windows.Forms.Button();
             this.dataGridView2 = new System.Windows.Forms.DataGridView();
+            this.ProductionCode = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.ProductionBarcode = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.MeasurementName = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.MeasurementType = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.MeasurementValue = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.MeasurementResult = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.OperationStartTime = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.OperationEndTime = new System.Windows.Forms.DataGridViewTextBoxColumn();
             this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
             this.comboBoxMeasurementType_MR = new System.Windows.Forms.ComboBox();
             this.label10 = new System.Windows.Forms.Label();
@@ -90,14 +98,6 @@
             this.panel3 = new System.Windows.Forms.Panel();
             this.buttonExport_MR = new System.Windows.Forms.Button();
             this.buttonQuery_MR = new System.Windows.Forms.Button();
-            this.ProductionCode = new System.Windows.Forms.DataGridViewTextBoxColumn();
-            this.ProductionBarcode = new System.Windows.Forms.DataGridViewTextBoxColumn();
-            this.MeasurementName = new System.Windows.Forms.DataGridViewTextBoxColumn();
-            this.MeasurementType = new System.Windows.Forms.DataGridViewTextBoxColumn();
-            this.MeasurementValue = new System.Windows.Forms.DataGridViewTextBoxColumn();
-            this.MeasurementResult = new System.Windows.Forms.DataGridViewTextBoxColumn();
-            this.OperationStartTime = new System.Windows.Forms.DataGridViewTextBoxColumn();
-            this.OperationEndTime = new System.Windows.Forms.DataGridViewTextBoxColumn();
             this.tabControl1.SuspendLayout();
             this.tabPage1.SuspendLayout();
             this.tableLayoutPanel1.SuspendLayout();
@@ -186,6 +186,7 @@
             this.textBoxPageNum.Name = "textBoxPageNum";
             this.textBoxPageNum.Size = new System.Drawing.Size(80, 21);
             this.textBoxPageNum.TabIndex = 2;
+            this.textBoxPageNum.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ToPage);
             // 
             // buttonToLastPage
             // 
@@ -197,6 +198,7 @@
             this.buttonToLastPage.TabIndex = 1;
             this.buttonToLastPage.Text = "鏈�鍚庨〉";
             this.buttonToLastPage.UseVisualStyleBackColor = true;
+            this.buttonToLastPage.Click += new System.EventHandler(this.buttonToLastPage_Click);
             // 
             // buttonToNextPage
             // 
@@ -208,6 +210,7 @@
             this.buttonToNextPage.TabIndex = 1;
             this.buttonToNextPage.Text = "鍚庝竴椤�";
             this.buttonToNextPage.UseVisualStyleBackColor = true;
+            this.buttonToNextPage.Click += new System.EventHandler(this.buttonToNextPage_Click);
             // 
             // buttonToBeforePage
             // 
@@ -219,6 +222,7 @@
             this.buttonToBeforePage.TabIndex = 1;
             this.buttonToBeforePage.Text = "鍓嶄竴椤�";
             this.buttonToBeforePage.UseVisualStyleBackColor = true;
+            this.buttonToBeforePage.Click += new System.EventHandler(this.buttonToBeforePage_Click);
             // 
             // buttonToFirstPage
             // 
@@ -230,6 +234,7 @@
             this.buttonToFirstPage.TabIndex = 1;
             this.buttonToFirstPage.Text = "绗竴椤�";
             this.buttonToFirstPage.UseVisualStyleBackColor = true;
+            this.buttonToFirstPage.Click += new System.EventHandler(this.buttonToFirstPage_Click);
             // 
             // labelTotal
             // 
@@ -287,9 +292,9 @@
             // Column4
             // 
             this.Column4.DataPropertyName = "OperationStartTime";
-            dataGridViewCellStyle1.Format = "G";
-            dataGridViewCellStyle1.NullValue = null;
-            this.Column4.DefaultCellStyle = dataGridViewCellStyle1;
+            dataGridViewCellStyle45.Format = "G";
+            dataGridViewCellStyle45.NullValue = null;
+            this.Column4.DefaultCellStyle = dataGridViewCellStyle45;
             this.Column4.HeaderText = "鐢熶骇鏃堕棿(寮�濮�)";
             this.Column4.Name = "Column4";
             this.Column4.ReadOnly = true;
@@ -298,9 +303,9 @@
             // Column5
             // 
             this.Column5.DataPropertyName = "OperationEndTime";
-            dataGridViewCellStyle2.Format = "G";
-            dataGridViewCellStyle2.NullValue = null;
-            this.Column5.DefaultCellStyle = dataGridViewCellStyle2;
+            dataGridViewCellStyle46.Format = "G";
+            dataGridViewCellStyle46.NullValue = null;
+            this.Column5.DefaultCellStyle = dataGridViewCellStyle46;
             this.Column5.HeaderText = "鐢熶骇鏃堕棿(缁撴潫)";
             this.Column5.Name = "Column5";
             this.Column5.ReadOnly = true;
@@ -532,6 +537,7 @@
             this.textBoxPageNum_MR.Name = "textBoxPageNum_MR";
             this.textBoxPageNum_MR.Size = new System.Drawing.Size(80, 21);
             this.textBoxPageNum_MR.TabIndex = 2;
+            this.textBoxPageNum_MR.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ToPageMR);
             // 
             // buttonToLastPage_MR
             // 
@@ -543,6 +549,7 @@
             this.buttonToLastPage_MR.TabIndex = 1;
             this.buttonToLastPage_MR.Text = "鏈�鍚庨〉";
             this.buttonToLastPage_MR.UseVisualStyleBackColor = true;
+            this.buttonToLastPage_MR.Click += new System.EventHandler(this.buttonToLastPage_MR_Click);
             // 
             // buttonToNextPage_MR
             // 
@@ -554,6 +561,7 @@
             this.buttonToNextPage_MR.TabIndex = 1;
             this.buttonToNextPage_MR.Text = "鍚庝竴椤�";
             this.buttonToNextPage_MR.UseVisualStyleBackColor = true;
+            this.buttonToNextPage_MR.Click += new System.EventHandler(this.buttonToNextPage_MR_Click);
             // 
             // buttonToBeforePage_MR
             // 
@@ -565,6 +573,7 @@
             this.buttonToBeforePage_MR.TabIndex = 1;
             this.buttonToBeforePage_MR.Text = "鍓嶄竴椤�";
             this.buttonToBeforePage_MR.UseVisualStyleBackColor = true;
+            this.buttonToBeforePage_MR.Click += new System.EventHandler(this.buttonToBeforePage_MR_Click);
             // 
             // buttonToFirstPage_MR
             // 
@@ -576,6 +585,7 @@
             this.buttonToFirstPage_MR.TabIndex = 1;
             this.buttonToFirstPage_MR.Text = "绗竴椤�";
             this.buttonToFirstPage_MR.UseVisualStyleBackColor = true;
+            this.buttonToFirstPage_MR.Click += new System.EventHandler(this.buttonToFirstPage_MR_Click);
             // 
             // dataGridView2
             // 
@@ -599,6 +609,70 @@
             this.dataGridView2.RowTemplate.Height = 23;
             this.dataGridView2.Size = new System.Drawing.Size(751, 579);
             this.dataGridView2.TabIndex = 2;
+            // 
+            // ProductionCode
+            // 
+            this.ProductionCode.DataPropertyName = "ProductionCode";
+            this.ProductionCode.HeaderText = "浜у搧缂栫爜";
+            this.ProductionCode.Name = "ProductionCode";
+            this.ProductionCode.ReadOnly = true;
+            // 
+            // ProductionBarcode
+            // 
+            this.ProductionBarcode.DataPropertyName = "ProductionBarcode";
+            this.ProductionBarcode.HeaderText = "浜у搧鏉$爜";
+            this.ProductionBarcode.Name = "ProductionBarcode";
+            this.ProductionBarcode.ReadOnly = true;
+            // 
+            // MeasurementName
+            // 
+            this.MeasurementName.DataPropertyName = "MeasurementName";
+            this.MeasurementName.HeaderText = "妫�娴嬪悕绉�";
+            this.MeasurementName.Name = "MeasurementName";
+            this.MeasurementName.ReadOnly = true;
+            // 
+            // MeasurementType
+            // 
+            this.MeasurementType.DataPropertyName = "MeasurementType";
+            this.MeasurementType.HeaderText = "妫�娴嬬被鍨�";
+            this.MeasurementType.Name = "MeasurementType";
+            this.MeasurementType.ReadOnly = true;
+            // 
+            // MeasurementValue
+            // 
+            this.MeasurementValue.DataPropertyName = "MeasurementValue";
+            this.MeasurementValue.HeaderText = "妫�娴嬪��";
+            this.MeasurementValue.Name = "MeasurementValue";
+            this.MeasurementValue.ReadOnly = true;
+            // 
+            // MeasurementResult
+            // 
+            this.MeasurementResult.DataPropertyName = "MeasurementResult";
+            this.MeasurementResult.HeaderText = "妫�娴嬬粨鏋�";
+            this.MeasurementResult.Name = "MeasurementResult";
+            this.MeasurementResult.ReadOnly = true;
+            // 
+            // OperationStartTime
+            // 
+            this.OperationStartTime.DataPropertyName = "OperationStartTime";
+            dataGridViewCellStyle47.Format = "G";
+            dataGridViewCellStyle47.NullValue = null;
+            this.OperationStartTime.DefaultCellStyle = dataGridViewCellStyle47;
+            this.OperationStartTime.HeaderText = "鐢熶骇鏃堕棿(寮�濮�)";
+            this.OperationStartTime.Name = "OperationStartTime";
+            this.OperationStartTime.ReadOnly = true;
+            this.OperationStartTime.Width = 120;
+            // 
+            // OperationEndTime
+            // 
+            this.OperationEndTime.DataPropertyName = "OperationEndTime";
+            dataGridViewCellStyle48.Format = "G";
+            dataGridViewCellStyle48.NullValue = null;
+            this.OperationEndTime.DefaultCellStyle = dataGridViewCellStyle48;
+            this.OperationEndTime.HeaderText = "鐢熶骇鏃堕棿(缁撴潫)";
+            this.OperationEndTime.Name = "OperationEndTime";
+            this.OperationEndTime.ReadOnly = true;
+            this.OperationEndTime.Width = 120;
             // 
             // tableLayoutPanel4
             // 
@@ -808,6 +882,7 @@
             this.buttonExport_MR.TabIndex = 18;
             this.buttonExport_MR.Text = "瀵煎嚭";
             this.buttonExport_MR.UseVisualStyleBackColor = true;
+            this.buttonExport_MR.Click += new System.EventHandler(this.buttonExport_MR_Click);
             // 
             // buttonQuery_MR
             // 
@@ -820,70 +895,6 @@
             this.buttonQuery_MR.Text = "鏌ヨ";
             this.buttonQuery_MR.UseVisualStyleBackColor = true;
             this.buttonQuery_MR.Click += new System.EventHandler(this.buttonQuery_MR_Click);
-            // 
-            // ProductionCode
-            // 
-            this.ProductionCode.DataPropertyName = "ProductionCode";
-            this.ProductionCode.HeaderText = "浜у搧缂栫爜";
-            this.ProductionCode.Name = "ProductionCode";
-            this.ProductionCode.ReadOnly = true;
-            // 
-            // ProductionBarcode
-            // 
-            this.ProductionBarcode.DataPropertyName = "ProductionBarcode";
-            this.ProductionBarcode.HeaderText = "浜у搧鏉$爜";
-            this.ProductionBarcode.Name = "ProductionBarcode";
-            this.ProductionBarcode.ReadOnly = true;
-            // 
-            // MeasurementName
-            // 
-            this.MeasurementName.DataPropertyName = "MeasurementName";
-            this.MeasurementName.HeaderText = "妫�娴嬪悕绉�";
-            this.MeasurementName.Name = "MeasurementName";
-            this.MeasurementName.ReadOnly = true;
-            // 
-            // MeasurementType
-            // 
-            this.MeasurementType.DataPropertyName = "MeasurementType";
-            this.MeasurementType.HeaderText = "妫�娴嬬被鍨�";
-            this.MeasurementType.Name = "MeasurementType";
-            this.MeasurementType.ReadOnly = true;
-            // 
-            // MeasurementValue
-            // 
-            this.MeasurementValue.DataPropertyName = "MeasurementValue";
-            this.MeasurementValue.HeaderText = "妫�娴嬪��";
-            this.MeasurementValue.Name = "MeasurementValue";
-            this.MeasurementValue.ReadOnly = true;
-            // 
-            // MeasurementResult
-            // 
-            this.MeasurementResult.DataPropertyName = "MeasurementResult";
-            this.MeasurementResult.HeaderText = "妫�娴嬬粨鏋�";
-            this.MeasurementResult.Name = "MeasurementResult";
-            this.MeasurementResult.ReadOnly = true;
-            // 
-            // OperationStartTime
-            // 
-            this.OperationStartTime.DataPropertyName = "OperationStartTime";
-            dataGridViewCellStyle3.Format = "G";
-            dataGridViewCellStyle3.NullValue = null;
-            this.OperationStartTime.DefaultCellStyle = dataGridViewCellStyle3;
-            this.OperationStartTime.HeaderText = "鐢熶骇鏃堕棿(寮�濮�)";
-            this.OperationStartTime.Name = "OperationStartTime";
-            this.OperationStartTime.ReadOnly = true;
-            this.OperationStartTime.Width = 120;
-            // 
-            // OperationEndTime
-            // 
-            this.OperationEndTime.DataPropertyName = "OperationEndTime";
-            dataGridViewCellStyle4.Format = "G";
-            dataGridViewCellStyle4.NullValue = null;
-            this.OperationEndTime.DefaultCellStyle = dataGridViewCellStyle4;
-            this.OperationEndTime.HeaderText = "鐢熶骇鏃堕棿(缁撴潫)";
-            this.OperationEndTime.Name = "OperationEndTime";
-            this.OperationEndTime.ReadOnly = true;
-            this.OperationEndTime.Width = 120;
             // 
             // M071_DataForm
             // 
diff --git a/src/Bro.M071.Process/UI/M071_DataForm.cs b/src/Bro.M071.Process/UI/M071_DataForm.cs
index 213b464..5b306db 100644
--- a/src/Bro.M071.Process/UI/M071_DataForm.cs
+++ b/src/Bro.M071.Process/UI/M071_DataForm.cs
@@ -1,11 +1,15 @@
-锘縰sing Bro.M071.DBManager;
+锘縰sing Bro.Common.Helper;
+using Bro.M071.DBManager;
 using Bro.M071.Model.Model;
 using Bro.UI.Model.Winform;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.Configuration;
 using System.Data;
 using System.Drawing;
+using System.IO;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -18,6 +22,10 @@
     {
         public ProductionMeasurementRecordsManager _productionMeasurementRecordsManager = new ProductionMeasurementRecordsManager();
         public MeasurementUnitResultManager _measurementUnitResultManager = new MeasurementUnitResultManager();
+
+        ProductionMeasurementRecordsRequest recordsRequest = new ProductionMeasurementRecordsRequest();
+        MeasurementUnitResultRequest resultRequest = new MeasurementUnitResultRequest();
+
         public M071_DataForm()
         {
             InitializeComponent();
@@ -33,7 +41,54 @@
 
         private void buttonQuery_Click(object sender, EventArgs e)
         {
-            ProductionMeasurementRecordsRequest recordsRequest = new ProductionMeasurementRecordsRequest();
+            recordsRequest.PageNum = 1;
+            GetProductionMeasurementRecords();
+        }
+        private void buttonToFirstPage_Click(object sender, EventArgs e)
+        {
+            recordsRequest.PageNum = 1;
+            GetProductionMeasurementRecords();
+        }
+        private void buttonToBeforePage_Click(object sender, EventArgs e)
+        {
+            if (recordsRequest.PageNum != 1)
+            {
+                recordsRequest.PageNum = recordsRequest.PageNum - 1;
+                GetProductionMeasurementRecords();
+            }
+        }
+        private void buttonToNextPage_Click(object sender, EventArgs e)
+        {
+            if (recordsRequest.PageNum != recordsRequest.TotalPage && recordsRequest.TotalPage != 0)
+            {
+                recordsRequest.PageNum = recordsRequest.PageNum + 1;
+                GetProductionMeasurementRecords();
+            }
+        }
+        private void buttonToLastPage_Click(object sender, EventArgs e)
+        {
+            if (recordsRequest.TotalPage != 0)
+            {
+                recordsRequest.PageNum = recordsRequest.TotalPage;
+                GetProductionMeasurementRecords();
+            }
+        }
+
+        private void ToPage(object sender, KeyEventArgs e)
+        {
+            if (e.KeyCode == Keys.Enter)
+            {
+                recordsRequest.PageNum = Convert.ToInt32(textBoxPageNum.Text);
+                if (recordsRequest.PageNum > recordsRequest.TotalPage)
+                {
+                    recordsRequest.PageNum = recordsRequest.TotalPage == 0 ? 1 : recordsRequest.TotalPage;
+                }
+                GetProductionMeasurementRecords();
+            }
+        }
+
+        private void GetProductionMeasurementRecords()
+        {
             recordsRequest.ProductionCode = textBoxPCode.Text;
             recordsRequest.ProductionBarcode = textBoxPBarCode.Text;
             recordsRequest.ProductionResult = comboBoxPResult.SelectedItem?.ToString();
@@ -46,35 +101,169 @@
             labelTotal.Text = $"鏁伴噺:{recordsRequest.TotalNum} 鎬婚〉鏁�:{recordsRequest.TotalPage}";
             textBoxPageNum.Text = recordsRequest.PageNum.ToString();
         }
-
         #endregion
 
         #region 娴嬮噺缁撴灉
         private void InitialMeasurementResultLayout()
         {
             comboBoxResult_MR.DataSource = new List<string>() { "", "OK", "NG" };
-            comboBoxMeasurementType_MR.DataSource = new List<string>() { "", "Slant", "HeightAlignment", "FullRowHeightAlignment" };
+            comboBoxMeasurementType_MR.DataSource = new List<string>() { "", "Slant", "Alignment", "RowAlignment" };
         }
 
         private void buttonQuery_MR_Click(object sender, EventArgs e)
         {
-            MeasurementUnitResultRequest recordsRequest = new MeasurementUnitResultRequest();
-            recordsRequest.ProductionCode = textBoxPCode_MR.Text;
-            recordsRequest.ProductionBarcode = textBoxtextBoxPBarCode_MR.Text;
-            recordsRequest.MeasurementName = textBoxMeasurementName_MR.Text;
-            recordsRequest.MeasurementType = comboBoxMeasurementType_MR.SelectedItem?.ToString();
-            recordsRequest.MeasurementResult = comboBoxResult_MR.SelectedItem?.ToString();
-            recordsRequest.StartTime = Convert.ToDateTime(dateTimePickerStartTime_MR.Value.ToString("D").ToString());
-            recordsRequest.EndTime = Convert.ToDateTime(dateTimePickerEndTime_MR.Value.AddDays(1).ToString("D").ToString()).AddSeconds(-1);
+            resultRequest.PageNum = 1;
+            GetMeasurementUnitResult();
+        }
 
-            var queryData = _measurementUnitResultManager.GetMeasurementUnitResult(recordsRequest);
+        private void GetMeasurementUnitResult()
+        {
+            resultRequest.ProductionCode = textBoxPCode_MR.Text;
+            resultRequest.ProductionBarcode = textBoxtextBoxPBarCode_MR.Text;
+            resultRequest.MeasurementName = textBoxMeasurementName_MR.Text;
+            resultRequest.MeasurementType = comboBoxMeasurementType_MR.SelectedItem?.ToString();
+            resultRequest.MeasurementResult = comboBoxResult_MR.SelectedItem?.ToString();
+            resultRequest.StartTime = Convert.ToDateTime(dateTimePickerStartTime_MR.Value.ToString("D").ToString());
+            resultRequest.EndTime = Convert.ToDateTime(dateTimePickerEndTime_MR.Value.AddDays(1).ToString("D").ToString()).AddSeconds(-1);
+
+            var queryData = _measurementUnitResultManager.GetMeasurementUnitResult(resultRequest);
+
             dataGridView2.AutoGenerateColumns = false;
             dataGridView2.DataSource = queryData;
             labelTotal_MR.Text = $"鏁伴噺:{recordsRequest.TotalNum} 鎬婚〉鏁�:{recordsRequest.TotalPage}";
             textBoxPageNum_MR.Text = recordsRequest.PageNum.ToString();
+
         }
+        private void ToPageMR(object sender, KeyEventArgs e)
+        {
+            if (e.KeyCode == Keys.Enter)
+            {
+                resultRequest.PageNum = Convert.ToInt32(textBoxPageNum.Text);
+                if (resultRequest.PageNum > resultRequest.TotalPage)
+                {
+                    resultRequest.PageNum = resultRequest.TotalPage == 0 ? 1 : resultRequest.TotalPage;
+                }
+                GetMeasurementUnitResult();
+            }
+        }
+        private void buttonExport_MR_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                var exportData = GetMeasurementUnitResultAndKeyUnitData();
+                if (exportData != null)
+                {
+                    ExportProductionExcel(exportData);
+                    MessageBox.Show("瀵煎嚭瀹屾垚");
+                }
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(ex.Message);
+            }
+        }
+
+        private void ExportProductionExcel(ProductionMeasurementUnitResultExportDataSet productionMeasurementUnitResultExportDataSet)
+        {
+            ExcelExportSet excelExportDto = new ExcelExportSet();
+            excelExportDto.Worksheets = new List<string>() { "鐢熶骇璁板綍", "妫�娴嬬粨鏋�", "鍘熷鏁版嵁" };
+            var productionRecordsColumns = new Dictionary<string, string>()
+                {
+                    {"ProductionCode", "浜у搧缂栫爜"},
+                    {"ProductionBarcode", "浜у搧鏉$爜"},
+                    {"ProductionResult", "浜у搧缁撴灉"},
+                    {"OperationStartTime", "鎿嶄綔寮�濮嬫椂闂�"},
+                    {"OperationEndTime", "鎿嶄綔缁撴潫鏃堕棿"}
+                };
+
+            var keyUnitColumns = new Dictionary<string, string>()
+                {
+                    {"ProductionBarcode", "浜у搧鏉$爜"},
+                    {"Key", "閿�"},
+                    {"MeasurementItem", "妫�娴嬮」"},
+                    {"ItemValue", "妫�娴嬪��"}
+                };
+            var measurementUnitResultColumns = new Dictionary<string, string>()
+                {
+                    {"ProductionBarcode", "浜у搧鏉$爜"},
+                    {"MeasurementName", "妫�娴嬪悕绉�"},
+                    {"MeasurementType", "妫�娴嬬被鍨�"},
+                    {"MeasurementValue", "妫�娴嬪��"},
+                    {"MeasurementResult", "妫�娴嬬粨鏋�"},
+                };
+
+            excelExportDto.WorksheetColumns[excelExportDto.Worksheets[0]] = productionRecordsColumns;
+            excelExportDto.WorksheetColumns[excelExportDto.Worksheets[1]] = keyUnitColumns;
+            excelExportDto.WorksheetColumns[excelExportDto.Worksheets[2]] = measurementUnitResultColumns;
+
+            excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[0]] = ExcelExportHelper.ListToDataTable(productionMeasurementUnitResultExportDataSet.ProductionMeasurementRecordList, productionRecordsColumns);
+            excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[1]] = ExcelExportHelper.ListToDataTable(productionMeasurementUnitResultExportDataSet.KeyUnitDataList, keyUnitColumns);
+            excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[2]] = ExcelExportHelper.ListToDataTable(productionMeasurementUnitResultExportDataSet.MeasurementUnitResultList, measurementUnitResultColumns);
+
+            var exportPath = ConfigurationManager.AppSettings["ExportPath"];
+            if (!Directory.Exists(exportPath))
+            {
+                Directory.CreateDirectory(exportPath);
+            }
+            var fileName = Path.Combine(exportPath, $"ExportData_{DateTime.Now.ToString("HHmmss")}.xlsx");
+
+            byte[] filecontent = ExcelExportHelper.CreateOrAppendExcel(excelExportDto, fileName);
+            FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
+            fs.Write(filecontent, 0, filecontent.Length);
+            fs.Flush();
+            fs.Close();
+        }
+
+        private ProductionMeasurementUnitResultExportDataSet GetMeasurementUnitResultAndKeyUnitData()
+        {
+            ProductionMeasurementUnitResultExportDataSet productionMeasurementUnitResultExportDataSet = new ProductionMeasurementUnitResultExportDataSet();
+            try
+            {
+                MeasurementUnitResultRequest measurementUnitResultRequest = resultRequest.DeepSerializeClone();
+                measurementUnitResultRequest.PageNum = 1;
+                measurementUnitResultRequest.PageSize = 10000;
+                productionMeasurementUnitResultExportDataSet = _measurementUnitResultManager.GetProductionMeasurementUnitResultExportDataSet(measurementUnitResultRequest);
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(ex.Message);
+            }
+            return productionMeasurementUnitResultExportDataSet;
+        }
+
+        private void buttonToFirstPage_MR_Click(object sender, EventArgs e)
+        {
+            resultRequest.PageNum = 1;
+            GetMeasurementUnitResult();
+        }
+
+        private void buttonToBeforePage_MR_Click(object sender, EventArgs e)
+        {
+            if (resultRequest.PageNum != 1)
+            {
+                resultRequest.PageNum = resultRequest.PageNum - 1;
+                GetMeasurementUnitResult();
+            }
+        }
+
+        private void buttonToNextPage_MR_Click(object sender, EventArgs e)
+        {
+            if (resultRequest.PageNum != resultRequest.TotalPage && resultRequest.TotalPage != 0)
+            {
+                resultRequest.PageNum = resultRequest.PageNum + 1;
+                GetMeasurementUnitResult();
+            }
+        }
+
+        private void buttonToLastPage_MR_Click(object sender, EventArgs e)
+        {
+            if (resultRequest.TotalPage != 0)
+            {
+                resultRequest.PageNum = resultRequest.TotalPage;
+                GetMeasurementUnitResult();
+            }
+        }
+
         #endregion
-
-
     }
 }
diff --git a/src/Bro.M071.Process/UI/M071_DataForm.resx b/src/Bro.M071.Process/UI/M071_DataForm.resx
index 899b2a9..75be4a3 100644
--- a/src/Bro.M071.Process/UI/M071_DataForm.resx
+++ b/src/Bro.M071.Process/UI/M071_DataForm.resx
@@ -156,4 +156,43 @@
   <metadata name="OperationEndTime.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
+  <metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="Column3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="Column4.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="Column5.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="ProductionCode.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="ProductionBarcode.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="MeasurementName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="MeasurementType.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="MeasurementValue.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="MeasurementResult.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="OperationStartTime.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="OperationEndTime.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
 </root>
\ No newline at end of file
diff --git a/src/Bro.UI.Config/App.config b/src/Bro.UI.Config/App.config
index b5c8db5..798153c 100644
--- a/src/Bro.UI.Config/App.config
+++ b/src/Bro.UI.Config/App.config
@@ -41,6 +41,7 @@
     <add key="AuthorityCheck" value="False" />
     <add key="AuthorityServer" value="192.168.1.255:11001" />
     <add key="ClientSettingsProvider.ServiceUri" value="" />
+    <add key="ExportPath" value="D:\PROJECTS\M071\Export" />
   </appSettings>
   <system.web>
     <membership defaultProvider="ClientAuthenticationMembershipProvider">

--
Gitblit v1.8.0