From f3ac4e7983dd475d800acc31cbbb8bbaf2e6c638 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周四, 29 8月 2024 15:08:18 +0800
Subject: [PATCH] 修复 OP05工位 获取打标二维码,会漏获取数据

---
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.cs                                             |  130 +++++++++++++++++++++
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.Designer.cs                                    |   15 ++
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs                                             |   42 +++++++
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/WorkPieceProcessHelper.cs               |   68 +++++++++++
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs                   |   40 ++++++
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_01.cs |    4 
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/iWare_SCADA_BusinessLogical.csproj            |    1 
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/iWare_SCADA_Test.csproj                                  |    5 
 8 files changed, 300 insertions(+), 5 deletions(-)

diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs
index 02fd821..6722b9c 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs
@@ -1,4 +1,5 @@
-锘縰sing iWare_SCADA_BusinessLogical.Utils;
+锘縰sing HslCommunication.BasicFramework;
+using iWare_SCADA_BusinessLogical.Utils;
 using iWare_SCADA_Model;
 using iWare_SCADA_Model.MiddleModel;
 using iWare_SCADA_Model.TableModel;
@@ -7,6 +8,7 @@
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
+using System.Data.Entity.Validation;
 using System.Diagnostics;
 //using System.Data.Entity.Infrastructure;
 using System.Linq;
@@ -372,12 +374,38 @@
                 catch (Exception e)
                 {
                     loginfo.Remarks = (loginfo.Remarks ?? "") + $"璇诲彇浜岀淮鐮亄loginfo.WorkPieceID ?? "绌�"}鏇存柊鏁版嵁寮傚父{e.Message}";
+                    Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}涓婄嚎鐩戞帶璇荤爜鏍囪 璇诲彇宸ヤ欢鐮佹暟鎹甗{loginfo.WorkPieceID ?? "绌�"}]鏃跺紓甯革細", e);
                 }
                 finally
                 {
                     loginfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                     db.WorkPieceLog.Add(loginfo);
-                    db.SaveChanges();
+
+                    //淇濆瓨鏁版嵁搴撶殑寮傚父鎹曟崏 [Editby shaocx,2024-08-29]
+                    try
+                    {
+                        db.SaveChanges();
+                    }
+                    catch (DbEntityValidationException exception)
+                    {
+                        var errorMessages =
+                            exception.EntityValidationErrors
+                                .SelectMany(validationResult => validationResult.ValidationErrors)
+                                .Select(m => m.ErrorMessage);
+                        var fullErrorMessage = string.Join(", ", errorMessages);
+                        var exceptionMessage = string.Concat(exception.Message, " 楠岃瘉寮傚父娑堟伅鏄細", fullErrorMessage);
+
+                        Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}涓婄嚎鐩戞帶璇荤爜鏍囪 璇诲彇宸ヤ欢鐮佹暟鎹甗{loginfo.WorkPieceID ?? "绌�"}],淇濆瓨鏁版嵁搴撴椂寮傚父锛�" + exceptionMessage, exception);
+
+                        throw new DbEntityValidationException(exceptionMessage, exception.EntityValidationErrors);
+                    }
+                    catch (Exception)
+                    {
+
+                        throw;
+                    }
+
+
 
                 }
 
@@ -735,7 +763,13 @@
                         var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == logMiddle.WorkPieceID && o.WorkingProcedureCurrent == pieceInfo.WorkingProcedureCurrent && o.OperationType == OperationType.鐢熶骇.ToString()).OrderByDescending(o => o.StartTime).FirstOrDefault();
                         if (pro == null || pro.WorkPieceID.Length < 1 || logMiddle.MonitoringPoint.Equals("OP1002") || logMiddle.MonitoringPoint.Equals("OP1003") || logMiddle.MonitoringPoint.Contains("OP2002"))
                         {// OP10 娌℃湁涓婄嚎鎵爜鏋紝绾﹀畾鐢ㄦ祴閲忓畬鎴愪俊鍙峰綋涓婄嚎鏍囪锛屾墍浠ヤ笂绾块渶瑕佷慨鏀圭殑瀛楁鏀捐繖閲�
-                            //涓婄嚎鏄瘡娆¢兘鎻掑叆
+                         //涓婄嚎鏄瘡娆¢兘鎻掑叆
+
+                            WorkPieceProcess process_05 = WorkPieceProcessHelper.CreateWorkPieceProcessForOP05(logMiddle, db, pieceInfo);
+                            if (process_05 != null)
+                            {//鍒涘缓OP05宸ュ簭锛屽綋娌℃湁05宸ュ簭鏃�,鎵嶅垱寤� 銆怑ditby shaocx,2024-08-29銆�
+                                db.WorkPieceProcess.Add(process_05);
+                            }
 
                             WorkPieceProcess process = new WorkPieceProcess();
                             process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(pieceInfo);
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_01.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_01.cs
index 024a265..77f72e9 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_01.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_01.cs
@@ -191,8 +191,8 @@
                         threadStatusMonitor.Remarks = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                         if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                         {
-                            threadStatusMonitor.ThreadFrequency = 5000;
-                            Thread.Sleep(5000);
+                            threadStatusMonitor.ThreadFrequency = 1000;
+                            Thread.Sleep(1000);
                         }
                         else
                         {
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/WorkPieceProcessHelper.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/WorkPieceProcessHelper.cs
new file mode 100644
index 0000000..fcb2572
--- /dev/null
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/WorkPieceProcessHelper.cs
@@ -0,0 +1,68 @@
+锘�
+using iWare_SCADA_BusinessLogical.BLL;
+using iWare_SCADA_Model;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace iWare_SCADA_BusinessLogical.Utils
+{
+    /// <summary>
+    /// 宸ュ簭甯姪绫�
+    /// </summary>
+    public class WorkPieceProcessHelper
+    {
+
+        /// <summary>
+        /// 鍒涘缓OP05宸ュ簭鏁版嵁
+        /// </summary>
+        /// <param name="db"></param>
+        /// <param name="pieceInfo"></param>
+        /// <returns></returns>
+        public static WorkPieceProcess CreateWorkPieceProcessForOP05(WorkPieceLogMiddle logMiddle, DbModel db, WorkPieceInfo pieceInfo)
+        {
+            if (!logMiddle.MonitoringPoint.Equals("OP1002"))
+            {
+                return null;
+            }
+
+            var _procedureCurrent_05 = "OP05";
+
+            var pro_05 = db.WorkPieceProcess.Where(o => o.WorkPieceID == pieceInfo.WorkPieceID && o.WorkingProcedureCurrent == _procedureCurrent_05
+            && o.OperationType == OperationType.鐢熶骇.ToString()).OrderByDescending(o => o.StartTime).FirstOrDefault();
+
+            if (pro_05 == null)
+            {
+                WorkPieceProcess process = new WorkPieceProcess();
+                process.WorkPieceID = pieceInfo.WorkPieceID;
+
+                var _time = DateTimeHelper.GetDateTime().AddMinutes(-3);
+                var _user = "OP0501";
+                process.StartTime = _time;
+                process.EndTime = _time;
+
+                process.EquipmentID = "EOP05";
+                process.WorkingProcedureCurrent = _procedureCurrent_05;
+
+
+                process.QualityState = (int)QualityState.OK;
+
+
+                process.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+                process.CreatedUserName = _user;
+                process.CreatedTime = _time;
+                process.UpdatedUserName = _user;
+                process.UpdatedTime = _time;
+                process.OperationType = OperationType.鐢熶骇.ToString();
+
+                process.Remarks = "";
+
+                return process;
+            }
+            return null;
+        }
+    }
+}
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/iWare_SCADA_BusinessLogical.csproj b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/iWare_SCADA_BusinessLogical.csproj
index 55705db..2bc86bd 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/iWare_SCADA_BusinessLogical.csproj
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/iWare_SCADA_BusinessLogical.csproj
@@ -156,6 +156,7 @@
       <DesignTime>True</DesignTime>
       <DependentUpon>Resources.resx</DependentUpon>
     </Compile>
+    <Compile Include="Utils\WorkPieceProcessHelper.cs" />
     <Compile Include="Utils\QualityStateHelper.cs" />
     <Compile Include="Utils\MonitorHelper.cs" />
     <Compile Include="Utils\SystemBussinessHelper.cs" />
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.Designer.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.Designer.cs
index c6c37cc..cf82524 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.Designer.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.Designer.cs
@@ -38,6 +38,7 @@
             this.label16 = new System.Windows.Forms.Label();
             this.dateTimePicker_Start = new System.Windows.Forms.DateTimePicker();
             this.btn_TongJi = new System.Windows.Forms.Button();
+            this.button5 = new System.Windows.Forms.Button();
             this.SuspendLayout();
             // 
             // button1
@@ -137,11 +138,24 @@
             this.btn_TongJi.UseVisualStyleBackColor = false;
             this.btn_TongJi.Click += new System.EventHandler(this.btn_TongJi_Click);
             // 
+            // button5
+            // 
+            this.button5.BackColor = System.Drawing.Color.Aqua;
+            this.button5.Location = new System.Drawing.Point(444, 605);
+            this.button5.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.button5.Name = "button5";
+            this.button5.Size = new System.Drawing.Size(155, 48);
+            this.button5.TabIndex = 20;
+            this.button5.Text = "鍒嗘瀽缂哄伐搴忛棶棰�";
+            this.button5.UseVisualStyleBackColor = false;
+            this.button5.Click += new System.EventHandler(this.button5_Click);
+            // 
             // Form1
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.ClientSize = new System.Drawing.Size(1307, 688);
+            this.Controls.Add(this.button5);
             this.Controls.Add(this.tb_TongJi);
             this.Controls.Add(this.checkBox_NowDay);
             this.Controls.Add(this.dateTimePicker_End);
@@ -171,6 +185,7 @@
         private System.Windows.Forms.Label label16;
         private System.Windows.Forms.DateTimePicker dateTimePicker_Start;
         private System.Windows.Forms.Button btn_TongJi;
+        private System.Windows.Forms.Button button5;
     }
 }
 
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.cs
index 1d8b48c..a06b941 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.cs
@@ -183,5 +183,135 @@
 
             this.tb_TongJi.Text = str;
         }
+
+        private void button5_Click(object sender, EventArgs e)
+        {
+            //鍒嗘瀽缂哄伐搴�
+            this.tb_TongJi.Text = "";
+
+            //鏌愭鏃堕棿鐨勭粺璁�
+            var str_start = this.dateTimePicker_Start.Value.ToString("yyyy-MM-dd" + " " + "00:00:00");
+            var str_end = this.dateTimePicker_End.Value.ToString("yyyy-MM-dd" + " " + "23:59:59");
+            var start = Convert.ToDateTime(str_start);
+            var end = Convert.ToDateTime(str_end);
+
+            int allPlacesCount = 0;
+            List<WorkPieceProcess> workPieceProcessList = new List<WorkPieceProcess>();
+            List<string> js_strList = new List<string>();
+            List<string> strList = new List<string>() {
+                "OP05","OP10","OP20","OP30","OP35","OP40","OP50","OP60","OP70","OP80"
+            };
+            var q_strList = string.Join(",", strList);
+            var str = "";
+            str += "鏃堕棿鑼冨洿: " + str_start + "鑷�" + str_end + " \r\n";
+            using (DbModel edm = new DbModel())
+            {
+                var pieces = edm.WorkPieceInfo.AsNoTracking().Where(x =>
+                 (x.CreatedTime >= start && x.CreatedTime <= end)).ToList();
+
+                var queryIds = pieces.Select(x => x.WorkPieceID).ToList();
+
+                var allPlaces = edm.WorkPieceProcess.AsNoTracking().Where(x => queryIds.Contains(x.WorkPieceID)).ToList();
+
+                var groups = allPlaces.GroupBy(x => x.WorkPieceID).OrderBy(x => x.Key);
+                foreach (var gg in groups)
+                {
+                    var _key = gg.Key;
+                    if (_key.Length != 22)
+                    {
+                        continue;
+                    }
+                    if (!(_key.IndexOf("DZ") > -1))
+                    {
+                        continue;
+                    }
+
+                    //閲嶆柊璇诲彇鏁版嵁搴�
+                    var _list = gg.ToList().OrderByDescending(x => x.CreatedTime);
+
+
+                    if (_key == "DZ045L2408290100451PAS")
+                    {
+                        var zz = "";
+                    }
+
+                    var fisrt = _list.FirstOrDefault();
+                    var first_pr = fisrt.WorkingProcedureCurrent;
+
+                    var bb = first_pr.Substring(2, 2);
+                    int ii = Convert.ToInt32(bb);
+
+                    List<string> new_strList = GetListForOP(ii);//鍏ㄩ儴鐨�
+                    var curList = _list.Select(x => x.WorkingProcedureCurrent).ToList();
+                    var cur_new_strList = new_strList.Where(x => !curList.Contains(x)).ToList();
+                    if (cur_new_strList.Count > 0)
+                    {
+                        //         //鍐嶈涓嬫暟鎹簱
+                        //         _list = edm.WorkPieceProcess.AsNoTracking().Where(x =>
+                        //x.WorkPieceID == _key).ToList().OrderByDescending(x => x.CreatedTime);
+                        //         curList = _list.Select(x => x.WorkingProcedureCurrent).ToList();
+                        //         cur_new_strList = new_strList.Where(x => !curList.Contains(x)).ToList();
+                    }
+                    //鐪嬬湅鍓嶉潰鐨勫伐搴忔槸鍚﹂兘鏈�
+                    foreach (var item in cur_new_strList)
+                    {
+
+
+                        workPieceProcessList.Add(new WorkPieceProcess()
+                        {
+                            WorkingProcedureCurrent = item,
+                            WorkPieceID = _key
+                        });
+                        js_strList.Add(item);
+                        allPlacesCount++;
+
+                    }
+
+                }
+
+            }
+
+            var hzStr = "";
+            //var groups22 = js_strList.GroupBy(x => x).OrderBy(x => x.Count());
+            var groups22 = js_strList.GroupBy(x => x).OrderBy(x => x.Key);
+            foreach (var gg in groups22)
+            {
+                hzStr += $"宸ュ簭缂哄け{gg.Key} 鍏眥gg.ToList().Count()}涓�" + "\r\n";
+            }
+
+            var total = $"鎬昏缂哄け:{allPlacesCount}銆�";
+            total += "\r\n";
+            total += hzStr;
+            total += "\r\n";
+
+            //澶勭悊
+            workPieceProcessList = workPieceProcessList.OrderBy(x => x.WorkingProcedureCurrent).ToList();
+            foreach (var item in workPieceProcessList)
+            {
+                str += $"缂哄皯{item.WorkingProcedureCurrent}宸ュ簭锛學orkPieceID: {item.WorkPieceID}  \r\n";
+            }
+            str += "\r\n";
+
+            this.tb_TongJi.Text = total + str;
+        }
+
+
+        private List<string> GetListForOP(int ii)
+        {
+            List<string> new_strList = new List<string>() { };
+            List<string> strList = new List<string>() {
+                "OP05","OP10","OP20","OP30","OP35","OP40","OP50","OP60","OP70","OP80"
+            };
+            foreach (var item in strList)
+            {
+                var bb = item.Substring(2, 2);
+                int dd = Convert.ToInt32(bb);
+                if (dd <= ii)
+                {
+                    new_strList.Add(item);
+                }
+            }
+            return new_strList;
+        }
     }
 }
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs
index a3c55fb..7381317 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs
@@ -3,8 +3,10 @@
 using iWare_SCADA_BusinessLogical.Utils;
 using iWare_SCADA_Model;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
+using System.Data.Entity.Validation;
 using System.IO;
 using System.Linq;
 
@@ -13,6 +15,46 @@
     [TestClass]
     public class UnitTest1
     {
+        [TestMethod]
+        public void TestMethoEntityValidationErrors()
+        {
+            var aa = "";
+            WorkPieceInfo cur_db_info = new WorkPieceInfo()
+            {
+                WorkingProcedureCurrent = "OP05"
+            };
+
+            try
+            {
+                using (DbModel db = new DbModel())
+                {
+                    db.WorkPieceInfo.Add(cur_db_info);
+                    db.SaveChanges();
+                }
+            }
+            catch (DbEntityValidationException dbEx)
+            {
+                //var bb = dbEx.EntityValidationErrors.ToList();
+                //var pp = bb.First().ValidationErrors.ToList();
+                //var z = JsonConvert.SerializeObject(pp);
+
+                var errorMessages =
+                    dbEx.EntityValidationErrors
+                        .SelectMany(validationResult => validationResult.ValidationErrors)
+                        .Select(m => m.ErrorMessage);
+
+                var fullErrorMessage = string.Join(", ", errorMessages);
+
+                //throw new DbEntityValidationException(exceptionMessage, exception.EntityValidationErrors);
+            }
+            catch (Exception)
+            {
+
+                throw;
+            }
+
+
+        }
 
 
         [TestMethod]
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/iWare_SCADA_Test.csproj b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/iWare_SCADA_Test.csproj
index 6a9f0ba..ea3853e 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/iWare_SCADA_Test.csproj
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/iWare_SCADA_Test.csproj
@@ -52,8 +52,13 @@
     <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
       <HintPath>..\packages\MSTest.TestFramework.2.2.7\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
     </Reference>
+    <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\DLL\Newtonsoft.Json.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Data" />
     <Reference Include="Yitter.IdGenerator.Net45, Version=1.0.0.4, Culture=neutral, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\packages\Yitter.IdGenerator.Net45.1.0.0\lib\net452\Yitter.IdGenerator.Net45.dll</HintPath>

--
Gitblit v1.9.3