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