From bbe45291ccc4a2839bc98c0499b8db257418e875 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周三, 26 6月 2024 10:41:18 +0800
Subject: [PATCH] 2

---
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfoLog.cs                           |   10 
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/Enums.cs                                                 |   22 +
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_05.cs  |    3 
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.Designer.cs                                     |   13 
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/OP80QualityDataHandler.cs |  132 +++---
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfoLog.cs                         |   68 +++
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/MiddleModel/WorkPieceLogMiddle.cs                        |    8 
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/App.config                                            |    2 
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.cs                                              |   30 +
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs                                              |   20 +
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceProcess.cs                           |   13 
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs                    |  386 ++++++++++++--------
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.cs                                      |   14 
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceLog.cs                               |   10 
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfo.cs                            |   67 +++
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_02.cs  |  256 ++++++++++----
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfo.cs                              |   13 
 DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/iWare_SCADA_Test.csproj                                   |    4 
 18 files changed, 770 insertions(+), 301 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 9cbd026..fb0d3df 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs
@@ -456,9 +456,9 @@
         /// <summary>
         /// 璐ㄩ噺妫�娴嬪畬鎴�
         /// </summary>
-        /// <param name="loginfo"></param>
+        /// <param name="logMiddle"></param>
         /// <param name="type"></param>
-        public static void QualityInfoComplete(WorkPieceLogMiddle loginfo, LogType type)
+        public static void QualityInfoComplete(WorkPieceLogMiddle logMiddle, LogType type)
         {
             //姝ゅ鍚屾椂鎻掑叆浜哤orkPieceLog锛學orkPieceInfoLog琛紝骞舵柊澧炴垨淇敼WorkPieceInfo琛�
             //鎻掑叆璐ㄩ噺鐩稿叧琛≦ualityDataInfo
@@ -468,79 +468,79 @@
 
                 bool isAddWorkPieceInfo = false;
                 WorkPieceLog loginfo2 = new WorkPieceLog();
-                loginfo2 = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLogMiddle>(loginfo);
+                loginfo2 = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLogMiddle>(logMiddle);
                 try
                 {
 
-                    if (loginfo.WorkPieceID.Length == 22)
+                    if (logMiddle.WorkPieceID.Length == 22)
                     {//鑾峰彇鍒扮殑宸ヤ欢鍙峰紓甯�
-                        WorkPieceInfo info = new WorkPieceInfo();
-                        info = db.WorkPieceInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
-                        if (info == null || info.WorkPieceID.Length < 1)
+                        WorkPieceInfo pieceInfo = new WorkPieceInfo();
+                        pieceInfo = db.WorkPieceInfo.Where(o => o.WorkPieceID == logMiddle.WorkPieceID).FirstOrDefault();
+                        if (pieceInfo == null || pieceInfo.WorkPieceID.Length < 1)
                         {//娌℃湁宸ヤ欢淇℃伅锛屼笉鍋氭洿鏂�
-                            if (loginfo.MonitoringPoint.Equals("OP1002") || loginfo.MonitoringPoint.Equals("OP1003") || loginfo.MonitoringPoint.Contains("OP2002"))
+                            if (logMiddle.MonitoringPoint.Equals("OP1002") || logMiddle.MonitoringPoint.Equals("OP1003") || logMiddle.MonitoringPoint.Contains("OP2002"))
                             {//OP10 娌℃湁涓婄嚎鎵爜鏋紝绾﹀畾鐢ㄦ祴閲忓畬鎴愪俊鍙峰綋涓婄嚎鏍囪
-                                info = EntityPropHelper.Mapper<WorkPieceInfo, WorkPieceLogMiddle>(loginfo);
+                                pieceInfo = EntityPropHelper.Mapper<WorkPieceInfo, WorkPieceLogMiddle>(logMiddle);
                                 //EntityPropHelper<WorkPieceLog, WorkPieceInfo>.CopyProp(loginfo, info, loginfo.GetWorkPieceInfoDict());
-                                if (!loginfo.WorkingProcedure.Equals("OP05"))
+                                if (!logMiddle.WorkingProcedure.Equals("OP05"))
                                 {//褰撳伐浠朵簩缁寸爜绗竴娆″嚭鐜扮殑宸ュ簭涓嶆槸OP05锛屽垯璁剧疆涓哄彲鐤戠姸鎬�
-                                    info.QualityState = (int)QualityState.Suspected;
-                                    info.QualityErrorInfo = $"宸ヤ欢浜岀淮鐮佺涓�娆″嚭鐜扮殑宸ュ簭{loginfo.MonitoringPoint}涓嶆槸OP05,鏁版嵁缂哄け,璇风‘璁ゆ儏鍐靛苟鍋氱浉搴斿鐞嗭紒";
-                                    info.Remarks = $"宸ヤ欢浜岀淮鐮佺涓�娆″嚭鐜扮殑宸ュ簭{loginfo.WorkingProcedure}涓嶆槸OP05,鏁版嵁缂哄け,璇风‘璁ゆ儏鍐靛苟鍋氱浉搴斿鐞嗭紒";
+                                    pieceInfo.QualityState = (int)QualityState.Suspected;
+                                    pieceInfo.QualityErrorInfo = $"宸ヤ欢浜岀淮鐮佺涓�娆″嚭鐜扮殑宸ュ簭{logMiddle.MonitoringPoint}涓嶆槸OP05,鏁版嵁缂哄け,璇风‘璁ゆ儏鍐靛苟鍋氱浉搴斿鐞嗭紒";
+                                    pieceInfo.Remarks = $"宸ヤ欢浜岀淮鐮佺涓�娆″嚭鐜扮殑宸ュ簭{logMiddle.WorkingProcedure}涓嶆槸OP05,鏁版嵁缂哄け,璇风‘璁ゆ儏鍐靛苟鍋氱浉搴斿鐞嗭紒";
                                 }
                                 else
                                 {
-                                    info.QualityState = (int)QualityState.OK;//姝ゅ闇�瑕佹敞鎰忥紝鍒ゆ柇鎵�鏈夊伐搴忚川閲忥紝鐒跺悗鍐嶈祴鍊�
-                                    info.Remarks = "OP05鏂板宸ヤ欢淇℃伅";
+                                    pieceInfo.QualityState = (int)QualityState.OK;//姝ゅ闇�瑕佹敞鎰忥紝鍒ゆ柇鎵�鏈夊伐搴忚川閲忥紝鐒跺悗鍐嶈祴鍊�
+                                    pieceInfo.Remarks = "OP05鏂板宸ヤ欢淇℃伅";
                                 }
-                                info.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime();
-                                info.WorkingProcedurePlan = ConfigHelper.GetConfigString("WorkingProcedureAllStr") ?? "OP05OP10OP20OP30OP35OP40OP50OP60OP70OP80";
-                                info.CreatedUserName = loginfo.MonitoringPoint;
-                                info.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
-                                info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();//
-                                info.WorkingProcedureEndTime = null;
-                                info = ParseQRCode(info);
+                                pieceInfo.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime();
+                                pieceInfo.WorkingProcedurePlan = ConfigHelper.GetConfigString("WorkingProcedureAllStr") ?? "OP05OP10OP20OP30OP35OP40OP50OP60OP70OP80";
+                                pieceInfo.CreatedUserName = logMiddle.MonitoringPoint;
+                                pieceInfo.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
+                                pieceInfo.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();//
+                                pieceInfo.WorkingProcedureEndTime = null;
+                                pieceInfo = ParseQRCode(pieceInfo);
                                 isAddWorkPieceInfo = true;
 
 
                             }
                             else
                             {
-                                loginfo2.Remarks = loginfo2.Remarks ?? "" + $"|宸ヤ欢{loginfo.WorkPieceID} 璐ㄩ噺妫�娴嬪畬鎴愬伐搴弡loginfo.MonitoringPoint} 娌℃湁鑾峰彇鍒板伐浠朵俊鎭笉鍋氭洿鏂�";
-                                Log4NetHelper.WriteErrorLog(type, $"宸ヤ欢{loginfo.WorkPieceID} 璐ㄩ噺妫�娴嬪畬鎴愬伐搴弡loginfo.MonitoringPoint} 娌℃湁鑾峰彇鍒板伐浠朵俊鎭笉鍋氭洿鏂�");
+                                loginfo2.Remarks = loginfo2.Remarks ?? "" + $"|宸ヤ欢{logMiddle.WorkPieceID} 璐ㄩ噺妫�娴嬪畬鎴愬伐搴弡logMiddle.MonitoringPoint} 娌℃湁鑾峰彇鍒板伐浠朵俊鎭笉鍋氭洿鏂�";
+                                Log4NetHelper.WriteErrorLog(type, $"宸ヤ欢{logMiddle.WorkPieceID} 璐ㄩ噺妫�娴嬪畬鎴愬伐搴弡logMiddle.MonitoringPoint} 娌℃湁鑾峰彇鍒板伐浠朵俊鎭笉鍋氭洿鏂�");
                                 return;
                             }
                         }
-                        if (loginfo.MonitoringPoint.Equals("OP1002") || loginfo.MonitoringPoint.Equals("OP1003") || loginfo.MonitoringPoint.Contains("OP2002"))
+                        if (logMiddle.MonitoringPoint.Equals("OP1002") || logMiddle.MonitoringPoint.Equals("OP1003") || logMiddle.MonitoringPoint.Contains("OP2002"))
                         {// OP10 娌℃湁涓婄嚎鎵爜鏋紝绾﹀畾鐢ㄦ祴閲忓畬鎴愪俊鍙峰綋涓婄嚎鏍囪锛屾墍浠ヤ笂绾块渶瑕佷慨鏀圭殑瀛楁鏀捐繖閲�
 
-                            if (loginfo.WorkingProcedure.Equals("OP10"))
+                            if (logMiddle.WorkingProcedure.Equals("OP10"))
                             {
-                                var WorkingProcedure = (loginfo.MonitoringPoint.Equals("OP1002") ? "OP10" : "OP40");
+                                var WorkingProcedure = (logMiddle.MonitoringPoint.Equals("OP1002") ? "OP10" : "OP40");
                                 loginfo2.WorkingProcedure = WorkingProcedure;//瑙e喅OP10锛孫P40鍚屼竴涓殑闂
-                                loginfo.WorkingProcedure = WorkingProcedure;//瑙e喅OP10锛孫P40鍚屼竴涓殑闂
+                                logMiddle.WorkingProcedure = WorkingProcedure;//瑙e喅OP10锛孫P40鍚屼竴涓殑闂
                             }
-                            info.WorkPieceCurrentPosition = loginfo.WorkingProcedure;
-                            info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2;
-                            info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
-                            info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();
+                            pieceInfo.WorkPieceCurrentPosition = logMiddle.WorkingProcedure;
+                            pieceInfo.WorkPieceCurrentPositionOrder = pieceInfo.WorkingProcedurePlan.IndexOf(logMiddle.WorkingProcedure) / 2;
+                            pieceInfo.WorkingProcedureCurrent = logMiddle.WorkingProcedure;
+                            pieceInfo.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();
 
                             #region 鏇存柊璁惧瀹炴椂琛�
 
                             bool isAddEquipmentCurrentMonitor = false;
                             EquipmentCurrentMonitor equinfo = new EquipmentCurrentMonitor();
-                            equinfo = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == loginfo.EquipmentID).FirstOrDefault();
+                            equinfo = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == logMiddle.EquipmentID).FirstOrDefault();
                             if (equinfo == null || equinfo.Id < 1)
                             {//娌℃湁宸ヤ欢淇℃伅锛屼笉鍋氭洿鏂�
-                                Log4NetHelper.WriteErrorLog(type, $"璁惧{loginfo.EquipmentID} 鍛婅鐩戞帶{loginfo.WorkingProcedure} 娌℃湁鑾峰彇鍒拌澶囩洃鎺т俊鎭紝鐜版柊澧�");
-                                equinfo = EntityPropHelper.Mapper<EquipmentCurrentMonitor, WorkPieceLog>(loginfo);
+                                Log4NetHelper.WriteErrorLog(type, $"璁惧{logMiddle.EquipmentID} 鍛婅鐩戞帶{logMiddle.WorkingProcedure} 娌℃湁鑾峰彇鍒拌澶囩洃鎺т俊鎭紝鐜版柊澧�");
+                                equinfo = EntityPropHelper.Mapper<EquipmentCurrentMonitor, WorkPieceLog>(logMiddle);
                                 equinfo.OnlineTime = DateTime.Now;
                                 isAddEquipmentCurrentMonitor = true;
                             }
                             else
                             {//鏇存柊宸ヤ欢
-                                equinfo.WorkPieceID = loginfo.WorkPieceID;
-                                equinfo.UpdatedUserName = loginfo.MonitoringPoint;
+                                equinfo.WorkPieceID = logMiddle.WorkPieceID;
+                                equinfo.UpdatedUserName = logMiddle.MonitoringPoint;
                                 equinfo.UpdatedTime = DateTime.Now;
                                 equinfo.OnlineTime = DateTime.Now;
                             }
@@ -552,90 +552,93 @@
                             #endregion
                             //UpdateKnifeToolLift(db, loginfo);//鏇存柊鍒�鍏峰鍛戒俊鎭�
                         }
-                        info.WorkPieceState = (int)WorkPieceState.WIP;//鎺ㄥ嚭鍚庡拰SPC鎶芥鍚� 璐ㄩ噺褰曞叆鏃剁姸鎬佷慨鏀瑰洖鍦ㄥ埗鍝�
-                        info.EquipmentID = loginfo.EquipmentID;
-                        info.QualityStateUpdateUser = loginfo.UpdatedUserName;
-                        info.QualityStateUpdateTime = loginfo.UpdatedTime.Value.LocalDateTime;
-                        info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
-                        info.Remarks = info.Remarks ?? "" + $"{loginfo.WorkingProcedure}璐ㄩ噺妫�娴嬪畬鎴愪慨鏀�";
-                        info.UpdatedUserName = loginfo.MonitoringPoint;
-                        info.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
-                        if (!(info.WorkingProcedureStartTime.HasValue && info.WorkingProcedureStartTime > DateTime.Parse("1900/01/01")))
+                        pieceInfo.WorkPieceState = (int)WorkPieceState.WIP;//鎺ㄥ嚭鍚庡拰SPC鎶芥鍚� 璐ㄩ噺褰曞叆鏃剁姸鎬佷慨鏀瑰洖鍦ㄥ埗鍝�
+                        pieceInfo.EquipmentID = logMiddle.EquipmentID;
+                        pieceInfo.QualityStateUpdateUser = logMiddle.UpdatedUserName;
+                        pieceInfo.QualityStateUpdateTime = logMiddle.UpdatedTime.Value.LocalDateTime;
+                        pieceInfo.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
+                        pieceInfo.Remarks = pieceInfo.Remarks ?? "" + $"{logMiddle.WorkingProcedure}璐ㄩ噺妫�娴嬪畬鎴愪慨鏀�";
+                        pieceInfo.UpdatedUserName = logMiddle.MonitoringPoint;
+                        pieceInfo.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
+                        if (!(pieceInfo.WorkingProcedureStartTime.HasValue && pieceInfo.WorkingProcedureStartTime > DateTime.Parse("1900/01/01")))
                         {//宸ュ簭寮�濮嬫椂闂存病鏈夊垯璧嬪��
-                            info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();
+                            pieceInfo.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();
                         }
-                        info.QualityState = (int)((loginfo.QualityStateStr.Equals("OK") || loginfo.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
+                        pieceInfo.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
+                        //璧嬪�间笉鍚堟牸鍘熷洜
+                        SetQualityNoOk_WorkPieceInfo(logMiddle, ref pieceInfo);
 
-                        if (!info.QualityState.Equals(((int)QualityState.OK).ToString()))
+
+                        if (!pieceInfo.QualityState.Equals(((int)QualityState.OK).ToString()))
                         {
-                            info.QualityErrorInfo = $"{loginfo.WorkingProcedure}宸ュ簭璐ㄩ噺閲囬泦鏁版嵁涓嶅悎鏍納info.QualityState}";
+                            pieceInfo.QualityErrorInfo = $"{logMiddle.WorkingProcedure}宸ュ簭璐ㄩ噺閲囬泦鏁版嵁涓嶅悎鏍納pieceInfo.QualityState}";
                         }
                         else
                         {
-                            info.QualityErrorInfo = "";
+                            pieceInfo.QualityErrorInfo = "";
                         }
-                        loginfo.QualityState = info.QualityState;
+                        logMiddle.QualityState = pieceInfo.QualityState;
                         if (isAddWorkPieceInfo)
                         {
-                            db.WorkPieceInfo.Add(info);
+                            db.WorkPieceInfo.Add(pieceInfo);
                         }
 
                         #region 鏍规嵁鏍囧噯鍊兼洿鏂版渶鏂拌川閲忔暟鎹紙OP10/OP40/OP20/OP60锛�
-                        var qcofig = db.EquipmentQualityConfig.Where(o => o.WorkingProcedure.Equals(loginfo.WorkingProcedure) && o.ParamType != 1 && o.IsDeleted == false).ToList();
+                        var qcofig = db.EquipmentQualityConfig.Where(o => o.WorkingProcedure.Equals(logMiddle.WorkingProcedure) && o.ParamType != 1 && o.IsDeleted == false).ToList();
                         if (qcofig.Count > 0)
                         {
-                            QualityDataHand(loginfo, qcofig);
+                            QualityDataHand(logMiddle, qcofig);
                         }
                         #endregion
 
 
-                        var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
+                        var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == logMiddle.WorkPieceID).FirstOrDefault();
                         if (qualityData == null || qualityData.WorkPieceID.Length < 1 || qualityData.WorkingProcedure.Length < 1)
                         {//鎻掑叆QualityDataInfo琛�
-                            qualityData = EntityPropHelper.Mapper<QualityDataInfo, WorkPieceLog>(loginfo);
+                            qualityData = EntityPropHelper.Mapper<QualityDataInfo, WorkPieceLog>(logMiddle);
                             db.QualityDataInfo.Add(GetAddQualityDataInfo(qualityData));
                         }
                         //淇敼QualityDataInfo琛� //閲嶅鏀跺埌璐ㄩ噺淇℃伅锛屼細瑕嗙洊涔嬪墠鐨�
-                        EntityPropHelper<WorkPieceLogMiddle, QualityDataInfo>.CopyProp(loginfo, qualityData, GetQualityDataInfoUpdate(loginfo.WorkingProcedure, loginfo.MonitoringPoint));//鎸囧畾淇敼瀛楁
+                        EntityPropHelper<WorkPieceLogMiddle, QualityDataInfo>.CopyProp(logMiddle, qualityData, GetQualityDataInfoUpdate(logMiddle, logMiddle.WorkingProcedure, logMiddle.MonitoringPoint));//鎸囧畾淇敼瀛楁
 
-                        qualityData.QualityStateUpdateUser = info.UpdatedUserName;
-                        qualityData.QualityReceiveTime = info.UpdatedTime.Value.LocalDateTime;
-                        qualityData.QualityStateUpdateMode = info.QualityStateUpdateMode;
-                        if (loginfo.WorkingProcedure.Equals("OP10"))
+                        qualityData.QualityStateUpdateUser = pieceInfo.UpdatedUserName;
+                        qualityData.QualityReceiveTime = pieceInfo.UpdatedTime.Value.LocalDateTime;
+                        qualityData.QualityStateUpdateMode = pieceInfo.QualityStateUpdateMode;
+                        if (logMiddle.WorkingProcedure.Equals("OP10"))
                         {
-                            qualityData.OP10QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
+                            qualityData.OP10QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                             qualityData.OP10QualityReceiveTime = DateTimeHelper.GetDateTime();
                         }
-                        else if (loginfo.WorkingProcedure.Equals("OP20"))
+                        else if (logMiddle.WorkingProcedure.Equals("OP20"))
                         {
                             //Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}璐ㄩ噺淇℃伅銆恵loginfo.QualityStateStr ?? "绌�"}銆�" +
                             //    $"銆恵(loginfo.QualityState.HasValue? loginfo.QualityState.Value:999)}銆戙�恵(info.QualityState.HasValue ? info.QualityState.Value : 888)}銆� 璇诲彇宸ヤ欢鐮佹暟鎹甗{loginfo.WorkPieceID ?? "绌�"}]");
-                            qualityData.OP20QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
+                            qualityData.OP20QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                             qualityData.OP20QualityReceiveTime = DateTimeHelper.GetDateTime();
-                            qualityData.OP20QualityFilePath = loginfo.OP20QualityFilePath;
+                            qualityData.OP20QualityFilePath = logMiddle.OP20QualityFilePath;
                         }
-                        else if (loginfo.WorkingProcedure.Equals("OP30"))
+                        else if (logMiddle.WorkingProcedure.Equals("OP30"))
                         {
-                            switch (loginfo.MonitoringPoint)
+                            switch (logMiddle.MonitoringPoint)
                             {
                                 case "OP3002CH3":
-                                    qualityData.OP30QualityFilePathCH3 = loginfo.OP30QualityFilePathCH3;
-                                    qualityData.OP30QualityStateCH3 = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
+                                    qualityData.OP30QualityFilePathCH3 = logMiddle.OP30QualityFilePathCH3;
+                                    qualityData.OP30QualityStateCH3 = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                                     qualityData.OP30QualityReceiveTimeCH3 = DateTimeHelper.GetDateTime();
                                     break;
                                 case "OP3002CH4":
-                                    qualityData.OP30QualityFilePathCH4 = loginfo.OP30QualityFilePathCH4;
-                                    qualityData.OP30QualityStateCH4 = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
+                                    qualityData.OP30QualityFilePathCH4 = logMiddle.OP30QualityFilePathCH4;
+                                    qualityData.OP30QualityStateCH4 = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                                     qualityData.OP30QualityReceiveTimeCH4 = DateTimeHelper.GetDateTime();
                                     break;
                                 case "OP3002CH5":
-                                    qualityData.OP30QualityFilePathCH5 = loginfo.OP30QualityFilePathCH5;
-                                    qualityData.OP30QualityStateCH5 = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
+                                    qualityData.OP30QualityFilePathCH5 = logMiddle.OP30QualityFilePathCH5;
+                                    qualityData.OP30QualityStateCH5 = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                                     qualityData.OP30QualityReceiveTimeCH5 = DateTimeHelper.GetDateTime();
                                     break;
                                 case "OP3002CH6":
-                                    qualityData.OP30QualityFilePathCH6 = loginfo.OP30QualityFilePathCH6;
-                                    qualityData.OP30QualityStateCH6 = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
+                                    qualityData.OP30QualityFilePathCH6 = logMiddle.OP30QualityFilePathCH6;
+                                    qualityData.OP30QualityStateCH6 = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                                     qualityData.OP30QualityReceiveTimeCH6 = DateTimeHelper.GetDateTime();
                                     break;
                                 default:
@@ -644,42 +647,46 @@
                             //qualityData.OP30QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                             //qualityData.OP30QualityReceiveTime = DateTimeHelper.GetDateTime();
                         }
-                        else if (loginfo.WorkingProcedure.Equals("OP35"))
+                        else if (logMiddle.WorkingProcedure.Equals("OP35"))
                         {
-                            qualityData.OP35QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
+                            qualityData.OP35QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                             qualityData.OP35QualityReceiveTime = DateTimeHelper.GetDateTime();
                         }
-                        else if (loginfo.WorkingProcedure.Equals("OP40"))
+                        else if (logMiddle.WorkingProcedure.Equals("OP40"))
                         {
-                            qualityData.OP40QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
+                            qualityData.OP40QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                             qualityData.OP40QualityReceiveTime = DateTimeHelper.GetDateTime();
                         }
-                        else if (loginfo.WorkingProcedure.Equals("OP60"))
+                        else if (logMiddle.WorkingProcedure.Equals("OP60"))
                         {
-                            qualityData.OP60QualityFilePath = loginfo.OP60QualityFilePath;
-                            qualityData.OP60QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
+                            qualityData.OP60QualityFilePath = logMiddle.OP60QualityFilePath;
+                            qualityData.OP60QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                             qualityData.OP60QualityReceiveTime = DateTimeHelper.GetDateTime();
                         }
-                        else if (loginfo.WorkingProcedure.Equals("OP80"))
+                        else if (logMiddle.WorkingProcedure.Equals("OP80"))
                         {
-                            qualityData.OP80QualityFilePath = loginfo.OP80QualityFilePath;
-                            qualityData.OP80QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
+                            qualityData.OP80QualityFilePath = logMiddle.OP80QualityFilePath;
+                            qualityData.OP80QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                             qualityData.OP80QualityReceiveTime = DateTimeHelper.GetDateTime();
                         }
 
-                        var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID && o.WorkingProcedureCurrent == info.WorkingProcedureCurrent && o.OperationType == OperationType.鐢熶骇.ToString()).OrderByDescending(o => o.StartTime).FirstOrDefault();
-                        if (pro == null || pro.WorkPieceID.Length < 1 || loginfo.MonitoringPoint.Equals("OP1002") || loginfo.MonitoringPoint.Equals("OP1003") || loginfo.MonitoringPoint.Contains("OP2002"))
+                        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 = new WorkPieceProcess();
-                            process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(info);
+                            process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(pieceInfo);
                             process.StartTime = DateTimeHelper.GetDateTime();
-                            process.QualityState = info.QualityState.HasValue ? info.QualityState.Value : (int)QualityState.OK;
+                            process.QualityState = pieceInfo.QualityState.HasValue ? pieceInfo.QualityState.Value : (int)QualityState.OK;
+                            //璁板綍璐ㄩ噺涓嶅悎鏍煎師鍥� 銆怑ditby shaocx,2024-06-26銆�
+                            //璧嬪�间笉鍚堟牸鍘熷洜
+                            SetQualityNoOk_WorkPieceProcess(logMiddle, ref process);
+
                             process.Id = Yitter.IdGenerator.YitIdHelper.NextId();
-                            process.CreatedUserName = loginfo.MonitoringPoint;
+                            process.CreatedUserName = logMiddle.MonitoringPoint;
                             process.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
-                            process.UpdatedUserName = loginfo.MonitoringPoint;
+                            process.UpdatedUserName = logMiddle.MonitoringPoint;
                             process.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                             process.OperationType = OperationType.鐢熶骇.ToString();
                             process.QualityDataInfoID = qualityData.Id;
@@ -689,21 +696,23 @@
                         else
                         {//鍏朵粬鐨勯兘鍙槸淇敼
                             pro.QualityDataInfoID = qualityData.Id;
-                            pro.UpdatedUserName = loginfo.MonitoringPoint;
+                            pro.UpdatedUserName = logMiddle.MonitoringPoint;
                             pro.UpdatedTime = DateTimeHelper.GetDateTime();
-                            pro.QualityState = info.QualityState.HasValue ? info.QualityState.Value : 9;
+                            pro.QualityState = pieceInfo.QualityState.HasValue ? pieceInfo.QualityState.Value : 9;
+                            //璧嬪�间笉鍚堟牸鍘熷洜
+                            SetQualityNoOk_WorkPieceProcess(logMiddle, ref pro);
 
                             //TODO:鍒ゆ柇濡傛灉鏄�60宸ュ簭锛岄偅涔堝氨瑕佹洿鏂皃ro琛ㄧ殑鍒涘缓浜轰负loginfo.MonitoringPoint 銆怑ditby shaocx,2024-06-05銆�
-                            if (loginfo.WorkingProcedure == "OP60")
+                            if (logMiddle.WorkingProcedure == "OP60")
                             {
-                                pro.CreatedUserName = loginfo.MonitoringPoint;
+                                pro.CreatedUserName = logMiddle.MonitoringPoint;
 
                             }
                         }
 
-                        if (loginfo.QualityType != null && loginfo.QualityType.Equals(QualityType.SPC.ToString()))
+                        if (logMiddle.QualityType != null && logMiddle.QualityType.Equals(QualityType.SPC.ToString()))
                         {//SPC鍙嶉锛�
-                            if (loginfo.QualityState != (int)QualityState.OK)
+                            if (logMiddle.QualityState != (int)QualityState.OK)
                             {
                                 //褰撴煇鍒板伐搴忔娴嬪埌涓嶅悎鏍煎伐浠舵椂锛屼粠璇ュ伐浠跺姞宸ュ畬鎴愭椂鍒诲墠鎸囧畾鏃堕棿璧疯嚦鎶ユ涓嶅悎鏍兼椂闂存锛岀郴缁熷皢璇ュ伐浠剁殑鏈�鍚庡姞宸ュ伐搴忓湪璇ユ椂闂存鍐呭姞宸ョ殑鎵�鏈夊伐浠躲�佹鍦ㄥ姞宸ョ殑宸ヤ欢銆佽宸ュ簭鍏ュ彛澶勭殑绗竴涓伐浠跺叏閮ㄦ爣璁颁负鐤戜技鐘舵�侊紝鐢变汉宸ュ妫�宸ヤ欢骞朵慨鏀圭姸鎬侊紝骞舵敮鎸佹壒閲忓彉鏇淬��
                                 //绛斿锛氬湪绾挎祴閲忎笉闇�瑕佽蛋杩欎釜娴佺▼锛屽彧鏈塖PC鎶芥鎵嶉渶瑕侊紝闇�瑕佹妸杩欐椂闂存鐨勫伐浠跺叏閮ㄧ疆涓虹枒浼硷紝鍝�曟槸宸插畬鎴愬伐浠�
@@ -716,24 +725,24 @@
                             }
 
                         }
-                        db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info));
+                        db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(pieceInfo));
                         db.QualityDataInfoLog.Add(GetAddQualityDataInfoLog(qualityData));//鎻掑叆鏃ュ織
                     }
                     else
                     {
-                        loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璐ㄩ噺妫�娴嬪畬鎴愯鍙栦簩缁寸爜{loginfo.WorkPieceID ?? "绌�"}寮傚父";
-                        Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}宸ュ簭鐩戞帶璇荤爜鏍囪 璇诲彇宸ヤ欢鐮佹暟鎹甗{loginfo.WorkPieceID ?? "绌�"}]鏃跺紓甯革細");
+                        loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璐ㄩ噺妫�娴嬪畬鎴愯鍙栦簩缁寸爜{logMiddle.WorkPieceID ?? "绌�"}寮傚父";
+                        Log4NetHelper.WriteErrorLog(type, $" {logMiddle.WorkingProcedure}宸ュ簭鐩戞帶璇荤爜鏍囪 璇诲彇宸ヤ欢鐮佹暟鎹甗{logMiddle.WorkPieceID ?? "绌�"}]鏃跺紓甯革細");
 
                     }
                 }
                 catch (Exception ex)
                 {
-                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璐ㄩ噺妫�娴嬪畬鎴恵loginfo.WorkPieceID ?? "绌�"}鏇存柊鏁版嵁寮傚父{ex.Message}++{ex.StackTrace}";
-                    Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}宸ュ簭鐩戞帶璇荤爜鏍囪 璇诲彇宸ヤ欢鐮佹暟鎹甗{loginfo.WorkPieceID ?? "绌�"}]鏃跺紓甯革細");
+                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璐ㄩ噺妫�娴嬪畬鎴恵logMiddle.WorkPieceID ?? "绌�"}鏇存柊鏁版嵁寮傚父{ex.Message}++{ex.StackTrace}";
+                    Log4NetHelper.WriteErrorLog(type, $" {logMiddle.WorkingProcedure}宸ュ簭鐩戞帶璇荤爜鏍囪 璇诲彇宸ヤ欢鐮佹暟鎹甗{logMiddle.WorkPieceID ?? "绌�"}]鏃跺紓甯革細");
                 }
                 finally
                 {
-                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璐ㄩ噺锛歿loginfo.QualityStateStr ?? "绌�"}";
+                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璐ㄩ噺锛歿logMiddle.QualityStateStr ?? "绌�"}";
                     db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo2));//鎻掑叆宸ヤ欢閲囬泦鏃ュ織琛�
                     db.SaveChanges();
                 }
@@ -941,37 +950,43 @@
         /// <summary>
         /// 宸ュ簭瀹屾垚
         /// </summary>
-        /// <param name="loginfo"></param>
+        /// <param name="logMiddle"></param>
         /// <param name="type"></param>
-        public static void WorkingProcedureComplete(WorkPieceLogMiddle loginfo, LogType type)
+        public static void WorkingProcedureComplete(WorkPieceLogMiddle logMiddle, LogType type)
         {
 
             using (DbModel db = new DbModel())
             {
+                if (logMiddle.WorkingProcedure.Equals("OP70"))
+                {
+                    logMiddle.QualityState = (int)QualityState.OK; //濡傛灉鏄疧P70锛屽垯榛樿鏄悎鏍� 銆怑ditby shaocx,2024-06-25銆�
+                }
+
                 WorkPieceLog loginfo2 = new WorkPieceLog();
-                loginfo2 = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLogMiddle>(loginfo);
+                loginfo2 = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLogMiddle>(logMiddle);
 
                 try
                 {
-                    if (loginfo.WorkPieceID != null && loginfo.WorkPieceID.Trim('\0').Length == 22)
+                    if (logMiddle.WorkPieceID != null && logMiddle.WorkPieceID.Trim('\0').Length == 22)
                     {
+
                         bool isAddWorkPieceInfo = false;
                         WorkPieceInfo info = new WorkPieceInfo();
-                        info = db.WorkPieceInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
+                        info = db.WorkPieceInfo.Where(o => o.WorkPieceID == logMiddle.WorkPieceID).FirstOrDefault();
                         if (info == null || info.WorkPieceID.Length < 1)
                         {//娌℃湁宸ヤ欢淇℃伅锛屼笉鍋氭洿鏂�  锛堜负浜嗘祴璇曞厛鍏堟柊澧烇級
-                            Log4NetHelper.WriteErrorLog(type, $"宸ヤ欢{loginfo.WorkPieceID} 宸ヤ欢鎺ㄥ嚭宸ュ簭{loginfo.WorkingProcedure} 娌℃湁鑾峰彇鍒板伐浠朵俊鎭笉鍋氭洿鏂�");
+                            Log4NetHelper.WriteErrorLog(type, $"宸ヤ欢{logMiddle.WorkPieceID} 宸ヤ欢鎺ㄥ嚭宸ュ簭{logMiddle.WorkingProcedure} 娌℃湁鑾峰彇鍒板伐浠朵俊鎭笉鍋氭洿鏂�");
                             //db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo));//鎻掑叆宸ヤ欢閲囬泦鏃ュ織琛�
                             //db.SaveChanges();
 
-                            loginfo2 = CommonManager.Instance.GetWorkPieceID(loginfo, type);
-                            info = EntityPropHelper.Mapper<WorkPieceInfo, WorkPieceLog>(loginfo);
+                            loginfo2 = CommonManager.Instance.GetWorkPieceID(logMiddle, type);
+                            info = EntityPropHelper.Mapper<WorkPieceInfo, WorkPieceLog>(logMiddle);
                             //EntityPropHelper<WorkPieceLog, WorkPieceInfo>.CopyProp(loginfo, info, loginfo.GetWorkPieceInfoDict());
-                            if (!loginfo.WorkingProcedure.Equals("OP05"))
+                            if (!logMiddle.WorkingProcedure.Equals("OP05"))
                             {//褰撳伐浠朵簩缁寸爜绗竴娆″嚭鐜扮殑宸ュ簭涓嶆槸OP05锛屽垯璁剧疆涓哄彲鐤戠姸鎬�
                                 info.QualityState = (int)QualityState.Suspected;
-                                info.QualityErrorInfo = $"宸ヤ欢浜岀淮鐮佺涓�娆″嚭鐜扮殑宸ュ簭{loginfo.MonitoringPoint}涓嶆槸OP05,鏁版嵁缂哄け,璇风‘璁ゆ儏鍐靛苟鍋氱浉搴斿鐞嗭紒";
-                                info.Remarks = $"宸ヤ欢浜岀淮鐮佺涓�娆″嚭鐜扮殑宸ュ簭{loginfo.MonitoringPoint}涓嶆槸OP05,鏁版嵁缂哄け,璇风‘璁ゆ儏鍐靛苟鍋氱浉搴斿鐞嗭紒";
+                                info.QualityErrorInfo = $"宸ヤ欢浜岀淮鐮佺涓�娆″嚭鐜扮殑宸ュ簭{logMiddle.MonitoringPoint}涓嶆槸OP05,鏁版嵁缂哄け,璇风‘璁ゆ儏鍐靛苟鍋氱浉搴斿鐞嗭紒";
+                                info.Remarks = $"宸ヤ欢浜岀淮鐮佺涓�娆″嚭鐜扮殑宸ュ簭{logMiddle.MonitoringPoint}涓嶆槸OP05,鏁版嵁缂哄け,璇风‘璁ゆ儏鍐靛苟鍋氱浉搴斿鐞嗭紒";
                             }
                             else
                             {
@@ -980,37 +995,37 @@
                             }
                             info.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime();//WorkPieceInitOnlineTime
                             info.WorkingProcedurePlan = ConfigHelper.GetConfigString("WorkingProcedureAllStr") ?? "OP05OP10OP20OP30OP35OP40OP50OP60OP70OP80";
-                            info.CreatedUserName = loginfo.MonitoringPoint;
+                            info.CreatedUserName = logMiddle.MonitoringPoint;
                             info.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
-                            info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
+                            info.WorkingProcedureCurrent = logMiddle.WorkingProcedure;
                             info.WorkingProcedureEndTime = null;
                             info = ParseQRCode(info);
                             isAddWorkPieceInfo = true;
                         }
-                        if (loginfo.WorkingProcedure.Equals("OP10"))
+                        if (logMiddle.WorkingProcedure.Equals("OP10"))
                         {
                             //var WorkingProcedure = (loginfo.MonitoringPoint.Equals("OP1002") ? "OP10" : "OP40");
                             loginfo2.WorkingProcedure = info.WorkingProcedureCurrent;//瑙e喅OP10锛孫P40鍚屼竴涓殑闂
-                            loginfo.WorkingProcedure = info.WorkingProcedureCurrent; //瑙e喅OP10锛孫P40鍚屼竴涓殑闂
+                            logMiddle.WorkingProcedure = info.WorkingProcedureCurrent; //瑙e喅OP10锛孫P40鍚屼竴涓殑闂
                         }
-                        info.UpdatedUserName = loginfo.MonitoringPoint;
+                        info.UpdatedUserName = logMiddle.MonitoringPoint;
                         info.UpdatedTime = DateTimeHelper.GetDateTime();
-                        info.WorkingProcedureCompleted = info.WorkingProcedureCompleted + loginfo.WorkingProcedure;//宸插畬鎴愬伐搴�
+                        info.WorkingProcedureCompleted = info.WorkingProcedureCompleted + logMiddle.WorkingProcedure;//宸插畬鎴愬伐搴�
                         if (!(info.WorkingProcedureStartTime.HasValue && info.WorkingProcedureStartTime > DateTime.Parse("1900/01/01")))
                         {//鑻ヤ竴鐩存病鏈夊伐搴忓紑濮嬫椂闂达紝鍒欒祴鍊煎綋鍓嶆椂闂�
                             info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();
                         }
                         info.WorkingProcedureEndTime = DateTimeHelper.GetDateTime();
-                        info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2;
-                        info.Remarks = $"{loginfo.WorkingProcedure}宸ュ簭瀹屾垚";
+                        info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(logMiddle.WorkingProcedure) / 2;
+                        info.Remarks = $"{logMiddle.WorkingProcedure}宸ュ簭瀹屾垚";
                         long op80id = 0;
-                        if (loginfo.WorkingProcedure.Equals("OP80"))
+                        if (logMiddle.WorkingProcedure.Equals("OP80"))
                         {
                             info.WorkPieceState = (int)WorkPieceState.FinishedProducts;
                             info.WorkPieceLastOfflineTime = DateTimeHelper.GetDateTime();
                             info.WorkPieceCurrentPosition = "OP80";
                             info.CompleteTime = DateTimeHelper.GetDateTime();
-                            info.OP80NewCode = loginfo.OP80NewCode;
+                            info.OP80NewCode = logMiddle.OP80NewCode;
 
                             //璐ㄦ鏁版嵁鏀逛负 鑾峰彇鏂囦欢鍚庝慨鏀� 銆怑ditby shaocx,2024-06-15銆�
                             /*
@@ -1021,14 +1036,14 @@
                             info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
                             //*/
 
-                            var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
+                            var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == logMiddle.WorkPieceID).FirstOrDefault();
                             if (qualityData == null || qualityData.WorkPieceID.Length < 1 || qualityData.WorkingProcedure.Length < 1)
                             {//鎻掑叆QualityDataInfo琛�
-                                qualityData = EntityPropHelper.Mapper<QualityDataInfo, WorkPieceLog>(loginfo);
+                                qualityData = EntityPropHelper.Mapper<QualityDataInfo, WorkPieceLog>(logMiddle);
                                 db.QualityDataInfo.Add(GetAddQualityDataInfo(qualityData));
                             }
                             //淇敼QualityDataInfo琛� //閲嶅鏀跺埌璐ㄩ噺淇℃伅锛屼細瑕嗙洊涔嬪墠鐨�
-                            EntityPropHelper<WorkPieceLogMiddle, QualityDataInfo>.CopyProp(loginfo, qualityData, GetQualityDataInfoUpdate(loginfo.WorkingProcedure, loginfo.MonitoringPoint));//鎸囧畾淇敼瀛楁
+                            EntityPropHelper<WorkPieceLogMiddle, QualityDataInfo>.CopyProp(logMiddle, qualityData, GetQualityDataInfoUpdate(logMiddle, logMiddle.WorkingProcedure, logMiddle.MonitoringPoint));//鎸囧畾淇敼瀛楁
 
                             //璐ㄦ鏁版嵁鏀逛负 鑾峰彇鏂囦欢鍚庝慨鏀� 銆怑ditby shaocx,2024-06-15銆�
                             /*
@@ -1050,30 +1065,30 @@
                             }
                             //*/
                         }
-                        else if (loginfo.WorkingProcedure.Equals("OP30"))
+                        else if (logMiddle.WorkingProcedure.Equals("OP30"))
                         {
 
-                            info.QualityState = (int)((loginfo.QualityStateStr.Equals("OK") || loginfo.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
-                            loginfo.QualityState = info.QualityState;
-                            info.QualityStateUpdateUser = loginfo.UpdatedUserName;
-                            info.QualityStateUpdateTime = loginfo.UpdatedTime.Value.LocalDateTime;
+                            info.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
+                            logMiddle.QualityState = info.QualityState;
+                            info.QualityStateUpdateUser = logMiddle.UpdatedUserName;
+                            info.QualityStateUpdateTime = logMiddle.UpdatedTime.Value.LocalDateTime;
                             info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
 
-                            var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
+                            var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == logMiddle.WorkPieceID).FirstOrDefault();
                             if (qualityData == null || qualityData.WorkPieceID.Length < 1 || qualityData.WorkingProcedure.Length < 1)
                             {//鎻掑叆QualityDataInfo琛�
-                                qualityData = EntityPropHelper.Mapper<QualityDataInfo, WorkPieceLog>(loginfo);
+                                qualityData = EntityPropHelper.Mapper<QualityDataInfo, WorkPieceLog>(logMiddle);
                                 db.QualityDataInfo.Add(GetAddQualityDataInfo(qualityData));
                             }
                             qualityData.QualityStateUpdateUser = info.UpdatedUserName;
                             qualityData.QualityReceiveTime = info.UpdatedTime.Value.LocalDateTime;
                             qualityData.QualityStateUpdateMode = info.QualityStateUpdateMode;
-                            qualityData.OP30QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
+                            qualityData.OP30QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                             qualityData.OP30QualityReceiveTime = DateTimeHelper.GetDateTime();
-                            loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璐ㄩ噺锛歿loginfo.QualityStateStr ?? "绌�"}";
+                            loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璐ㄩ噺锛歿logMiddle.QualityStateStr ?? "绌�"}";
                             if (!info.QualityState.Equals(((int)QualityState.OK).ToString()))
                             {
-                                info.QualityErrorInfo = $"{loginfo.WorkingProcedure}宸ュ簭璐ㄩ噺閲囬泦鏁版嵁涓嶅悎鏍�";
+                                info.QualityErrorInfo = $"{logMiddle.WorkingProcedure}宸ュ簭璐ㄩ噺閲囬泦鏁版嵁涓嶅悎鏍�";
                             }
                             else
                             {
@@ -1083,13 +1098,13 @@
                         else
                         {
                             info.WorkPieceState = (int)WorkPieceState.WIP;
-                            if (info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) + 4 <= info.WorkingProcedurePlan.Length)
+                            if (info.WorkingProcedurePlan.IndexOf(logMiddle.WorkingProcedure) + 4 <= info.WorkingProcedurePlan.Length)
                             {
-                                info.WorkPieceCurrentPosition = info.WorkingProcedurePlan.Substring(info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure), 8);
+                                info.WorkPieceCurrentPosition = info.WorkingProcedurePlan.Substring(info.WorkingProcedurePlan.IndexOf(logMiddle.WorkingProcedure), 8);
                             }
                         }
 
-                        var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID && o.WorkingProcedureCurrent == info.WorkingProcedureCurrent && o.OperationType == OperationType.鐢熶骇.ToString()).OrderByDescending(o => o.StartTime).FirstOrDefault();
+                        var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == logMiddle.WorkPieceID && o.WorkingProcedureCurrent == info.WorkingProcedureCurrent && o.OperationType == OperationType.鐢熶骇.ToString()).OrderByDescending(o => o.StartTime).FirstOrDefault();
                         if (pro == null || pro.WorkPieceID.Length < 1)
                         {
                             WorkPieceProcess process = new WorkPieceProcess();
@@ -1097,22 +1112,22 @@
                             process.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                             process.StartTime = DateTimeHelper.GetDateTime();
                             process.EndTime = DateTimeHelper.GetDateTime();
-                            if (loginfo.WorkingProcedure.Equals("OP80"))
+                            if (logMiddle.WorkingProcedure.Equals("OP80"))
                             {//OP80鐨勮川閲忔暟鎹槸鍚庢潵鑾峰彇鏂囦欢鎼炵殑
                             }
                             else
                             {
-                                process.QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value : (int)QualityState.OK;
+                                process.QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value : (int)QualityState.OK;
                             }
-                            process.CreatedUserName = loginfo.MonitoringPoint;
+                            process.CreatedUserName = logMiddle.MonitoringPoint;
                             process.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
-                            process.UpdatedUserName = loginfo.MonitoringPoint;
+                            process.UpdatedUserName = logMiddle.MonitoringPoint;
                             process.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                             process.OperationType = OperationType.鐢熶骇.ToString();
                             process.Remarks = "";
-                            if (loginfo.WorkingProcedure.Equals("OP80"))
+                            if (logMiddle.WorkingProcedure.Equals("OP80"))
                             {
-                                process.GetQcDataFlag = loginfo.GetQcDataFlag;//璧嬪�兼爣璁� [Editby shaocx,2024-06-15]
+                                process.GetQcDataFlag = logMiddle.GetQcDataFlag;//璧嬪�兼爣璁� [Editby shaocx,2024-06-15]
                             }
                             if (op80id > 0)
                             {
@@ -1127,13 +1142,13 @@
                                 pro.QualityDataInfoID = op80id;
                             }
                             pro.EndTime = DateTimeHelper.GetDateTime();
-                            pro.UpdatedUserName = loginfo.MonitoringPoint;
+                            pro.UpdatedUserName = logMiddle.MonitoringPoint;
                             pro.UpdatedTime = DateTimeHelper.GetDateTime();
-                            if (loginfo.WorkingProcedure.Equals("OP80"))
+                            if (logMiddle.WorkingProcedure.Equals("OP80"))
                             {
                                 if (pro.GetQcDataFlag != 0)
                                 {
-                                    pro.GetQcDataFlag = loginfo.GetQcDataFlag;//璧嬪�兼爣璁� [Editby shaocx,2024-06-15]
+                                    pro.GetQcDataFlag = logMiddle.GetQcDataFlag;//璧嬪�兼爣璁� [Editby shaocx,2024-06-15]
                                 }
                             }
                         }
@@ -1147,14 +1162,14 @@
                     }
                     else
                     {
-                        loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"涓嬬嚎瀹屾垚璇诲彇浜岀淮鐮亄loginfo.WorkPieceID ?? "绌�"}寮傚父";
-                        Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}宸ュ簭涓嬬嚎 璇诲彇宸ヤ欢鐮佹暟鎹甗{loginfo.WorkPieceID ?? "绌�"}]鏃跺紓甯革細");
+                        loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"涓嬬嚎瀹屾垚璇诲彇浜岀淮鐮亄logMiddle.WorkPieceID ?? "绌�"}寮傚父";
+                        Log4NetHelper.WriteErrorLog(type, $" {logMiddle.WorkingProcedure}宸ュ簭涓嬬嚎 璇诲彇宸ヤ欢鐮佹暟鎹甗{logMiddle.WorkPieceID ?? "绌�"}]鏃跺紓甯革細");
 
                     }
                 }
                 catch (Exception e)
                 {
-                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璇诲彇浜岀淮鐮亄loginfo.WorkPieceID ?? "绌�"}鏇存柊鏁版嵁寮傚父{e.Message}";
+                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璇诲彇浜岀淮鐮亄logMiddle.WorkPieceID ?? "绌�"}鏇存柊鏁版嵁寮傚父{e.Message}";
                 }
                 db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo2));//鎻掑叆宸ヤ欢閲囬泦鏃ュ織琛�
                 db.SaveChanges();
@@ -1942,11 +1957,11 @@
         #region 涓氬姟鏂规硶
 
         /// <summary>
-        /// dict涓墠闈竴涓槸鍘熷璞★紝鍚庨潰涓�涓槸鐩爣瀵硅薄
+        ///  銆愯川閲忔暟鎹洿鏂颁笓鐢ㄣ�� dict涓墠闈竴涓槸鍘熷璞★紝鍚庨潰涓�涓槸鐩爣瀵硅薄
         /// </summary>
         /// <param name="WorkingProcedure"></param>
         /// <returns></returns>
-        public static Dictionary<string, string> GetQualityDataInfoUpdate(string WorkingProcedure = "", string MonitoringPoint = "")
+        public static Dictionary<string, string> GetQualityDataInfoUpdate(WorkPieceLogMiddle logMiddle, string WorkingProcedure = "", string MonitoringPoint = "")
         {
             Dictionary<string, string> dict = new Dictionary<string, string>();
 
@@ -1961,11 +1976,20 @@
             {
                 case "OP10":
                     dict.Add("QualityOP10To1", "QualityOP10To1");
+
+                    dict.Add("QualityNoOk", "QualityNoOk_OP10");
+                    dict.Add("QualityNoOkReason", "QualityNoOkReason_OP10");
                     break;
                 case "OP20":
                     dict.Add("QualityOP20To1", "QualityOP20To1");
+
+                    dict.Add("QualityNoOk", "QualityNoOk_OP20");
+                    dict.Add("QualityNoOkReason", "QualityNoOkReason_OP20");
                     break;
                 case "OP30":
+                    dict.Add("QualityNoOk", "QualityNoOk_OP30");
+                    dict.Add("QualityNoOkReason", "QualityNoOkReason_OP30");
+
                     switch (MonitoringPoint)
                     {
                         case "OP3002CH3":
@@ -1994,13 +2018,24 @@
                 case "OP35":
                     dict.Add("QualityOP35To1", "QualityOP35To1");
                     dict.Add("QualityOP35To2", "QualityOP35To2");
+
+                    dict.Add("QualityNoOk", "QualityNoOk_OP35");
+                    dict.Add("QualityNoOkReason", "QualityNoOkReason_OP35");
+
                     break;
                 case "OP40":
                     dict.Add("QualityOP40To1", "QualityOP40To1");
+
+                    dict.Add("QualityNoOk", "QualityNoOk_OP40");
+                    dict.Add("QualityNoOkReason", "QualityNoOkReason_OP40");
                     break;
                 case "OP60":
                     dict.Add("QualityOP60To1", "QualityOP60To1");
                     dict.Add("QualityOP60To2", "QualityOP60To2");
+
+                    dict.Add("QualityNoOk", "QualityNoOk_OP60");
+                    dict.Add("QualityNoOkReason", "QualityNoOkReason_OP60");
+
                     break;
                 case "OP70":
                     dict.Add("QualityOP70To1", "QualityOP70To1");
@@ -2036,7 +2071,10 @@
                     dict.Add("QualityOP80_X_S_Y", "QualityOP80_X_S_Y");
                     dict.Add("QualityOP80_X_X_X", "QualityOP80_X_X_X");
                     dict.Add("QualityOP80_X_X_Y", "QualityOP80_X_X_Y");
-                  
+
+
+                    dict.Add("QualityNoOk", "QualityNoOk_OP80");
+                    dict.Add("QualityNoOkReason", "QualityNoOkReason_OP80");
 
                     break;
                 default:
@@ -2045,6 +2083,42 @@
             return dict;
         }
 
+        /// <summary>
+        ///  銆愬伐浠舵垨宸ュ簭鏁版嵁鏁版嵁鏇存柊涓撶敤銆� dict涓墠闈竴涓槸鍘熷璞★紝鍚庨潰涓�涓槸鐩爣瀵硅薄
+        /// </summary>
+        /// <param name="WorkingProcedure"></param>
+        /// <returns></returns>
+        public static Dictionary<string, string> GetWorkPieceInfoUpdateForQualityNoOk(WorkPieceLogMiddle loginfo)
+        {
+            Dictionary<string, string> dict = new Dictionary<string, string>();
+
+            //if (loginfo.QualityState != null)
+            //{
+            //    QualityState qualityState;
+            //    bool isRight = Enum.TryParse<QualityState>(loginfo.QualityState.ToString(), out qualityState);
+            //    if (isRight && (qualityState == QualityState.NG || qualityState == QualityState.Suspected))
+            //    {
+
+            //    }
+            //}
+
+            dict.Add("QualityNoOk", "QualityNoOk");
+            dict.Add("QualityNoOkReason", "QualityNoOkReason");
+
+            return dict;
+        }
+
+        public static void SetQualityNoOk_WorkPieceInfo(WorkPieceLogMiddle logMiddle, ref WorkPieceInfo pieceInfo)
+        {
+            pieceInfo.QualityNoOk = logMiddle.QualityNoOk;
+            pieceInfo.QualityNoOkReason = logMiddle.QualityNoOkReason;
+        }
+        public static void SetQualityNoOk_WorkPieceProcess(WorkPieceLogMiddle logMiddle, ref WorkPieceProcess pieceProcess)
+        {
+            pieceProcess.QualityNoOk = logMiddle.QualityNoOk;
+            pieceProcess.QualityNoOkReason = logMiddle.QualityNoOkReason;
+        }
+
 
         /// <summary>
         /// 鍒ゆ柇鏄惁璺冲簭
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_02.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_02.cs
index ee4d387..62e4b40 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_02.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_02.cs
@@ -19,6 +19,7 @@
 using static System.Net.WebRequestMethods;
 using File = System.IO.File;
 using Spire.Additions.Xps.Schema;
+using log4net;
 
 namespace iWare_SCADA_BusinessLogical
 {
@@ -114,7 +115,8 @@
                 string path36 = ConfigHelper.GetConfigString("OP30QualityDataFor36Station");//op30 3宸ヤ綅锛�6宸ヤ綅鍦板潃
                 string path45 = ConfigHelper.GetConfigString("OP30QualityDataFor45Station");//op30 4宸ヤ綅锛�5宸ヤ綅鍦板潃
                 string pathOP20 = ConfigHelper.GetConfigString("OP20QualityData");
-                string pathOP60 = ConfigHelper.GetConfigString("OP60QualityData");
+                //string pathOP60 = ConfigHelper.GetConfigString("OP60QualityData");
+                string pathOP60 = @"Q:\Measuring_Data_dfq\";//鍐欐鍦板潃 銆怑ditby shaocx,2024-06-25銆�
                 if (string.IsNullOrEmpty(path36))
                 {
                     path36 = @"Z:\";
@@ -129,7 +131,7 @@
                 }
                 if (string.IsNullOrEmpty(pathOP60))
                 {
-                    pathOP60 = @"V:\";
+                    pathOP60 = @"Q:\Measuring_Data_dfq\";
                 }
 
                 if (DataCapturePointCode.Contains("CH3"))
@@ -202,18 +204,18 @@
                                 Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}杩涘叆娴嬮噺瀹屾垚銆恵value_02}銆戙�恵value.ToString()}銆�");
 
                                 threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
-                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
-                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
-                                wplog.WorkingProcedure = WorkingProcedure;
-                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID; ;
-                                wplog.Remarks = WorkingProcedure;
-                                wplog.MonitoringPoint = DataCapturePointCode;
-                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
-                                wplog.CreatedUserName = DataCapturePointCode;
-                                wplog.UpdatedUserName = Environment.MachineName + "鑷姩" + Thread.CurrentThread.ManagedThreadId.ToString();
-                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
-                                wplog.IsDeleted = false;
-                                wplog.QualityType = QualityType.Online.ToString();
+                                WorkPieceLogMiddle logMiddle = new WorkPieceLogMiddle();
+                                logMiddle.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+                                logMiddle.WorkingProcedure = WorkingProcedure;
+                                logMiddle.EquipmentID = _dataCaptureConfig.EquipmentID; ;
+                                logMiddle.Remarks = WorkingProcedure;
+                                logMiddle.MonitoringPoint = DataCapturePointCode;
+                                logMiddle.CreatedTime = DateTimeHelper.GetDateTime();
+                                logMiddle.CreatedUserName = DataCapturePointCode;
+                                logMiddle.UpdatedUserName = Environment.MachineName + "鑷姩" + Thread.CurrentThread.ManagedThreadId.ToString();
+                                logMiddle.UpdatedTime = DateTimeHelper.GetDateTime();
+                                logMiddle.IsDeleted = false;
+                                logMiddle.QualityType = QualityType.Online.ToString();
 
                                 foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                 {
@@ -221,23 +223,23 @@
                                     {
                                         var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                         //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//缁欏姩鎬佸瓧娈佃祴鍊�
-                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
+                                        var set = logMiddle.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                         if (set == null)
                                         {
-                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}宸ュ簭鐩戞帶娴嬮噺瀹屾垚鏍囪 璇诲彇宸ヤ欢鐮佸姩鎬佺敱浜庡瓧娈靛悕娌℃壘鍒帮紝璧嬪�笺�恵WorkingProcedure ?? "绌哄瓧绗︿覆"}銆戝け璐wplog.Id}");
+                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}宸ュ簭鐩戞帶娴嬮噺瀹屾垚鏍囪 璇诲彇宸ヤ欢鐮佸姩鎬佺敱浜庡瓧娈靛悕娌℃壘鍒帮紝璧嬪�笺�恵WorkingProcedure ?? "绌哄瓧绗︿覆"}銆戝け璐logMiddle.Id}");
                                         }
                                         if (set.PropertyType.FullName.Equals("System.String"))
                                         {
-                                            set.SetValue(wplog, valuecol.ToString());//缁欏姩鎬佸瓧娈佃祴鍊�
+                                            set.SetValue(logMiddle, valuecol.ToString());//缁欏姩鎬佸瓧娈佃祴鍊�
                                         }
                                         else
                                         {
-                                            set.SetValue(wplog, valuecol);//缁欏姩鎬佸瓧娈佃祴鍊�
+                                            set.SetValue(logMiddle, valuecol);//缁欏姩鎬佸瓧娈佃祴鍊�
                                         }
                                     }
                                     catch (Exception setex)
                                     {
-                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}宸ュ簭鐩戞帶娴嬮噺瀹屾垚鏍囪 璇诲彇宸ヤ欢鐮佸姩鎬佽祴鍊笺�恵WorkingProcedure ?? "绌哄瓧绗︿覆"}銆戝紓甯竰wplog.Id}", setex);
+                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}宸ュ簭鐩戞帶娴嬮噺瀹屾垚鏍囪 璇诲彇宸ヤ欢鐮佸姩鎬佽祴鍊笺�恵WorkingProcedure ?? "绌哄瓧绗︿覆"}銆戝紓甯竰logMiddle.Id}", setex);
                                     }
                                 }
 
@@ -295,27 +297,27 @@
                                         files = files.OrderByDescending(o => o.LastWriteTime).ToList();
                                         if (files.Count > 0)
                                         {
-                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"宸ヤ綅銆恵DataCapturePointCode}銆戝伐浠躲�恵wplog.WorkPieceID ?? "绌哄瓧绗�"}銆戞枃浠秢files[0].FullName}娴嬮噺瀹屾垚璇诲彇鏂囦欢鏁版嵁寮�濮�");
+                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"宸ヤ綅銆恵DataCapturePointCode}銆戝伐浠躲�恵logMiddle.WorkPieceID ?? "绌哄瓧绗�"}銆戞枃浠秢files[0].FullName}娴嬮噺瀹屾垚璇诲彇鏂囦欢鏁版嵁寮�濮�");
                                             switch (DataCapturePointCode)
                                             {
                                                 case "OP3002CH3":
-                                                    wplog.OP30QualityFilePathCH3 = files[0].FullName;
-                                                    wplog.QualityStateStr = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Result");
-                                                    wplog.QualityOP30To1 = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Y-Maximum");//娑ㄦ柇鍔涚煩
+                                                    logMiddle.OP30QualityFilePathCH3 = files[0].FullName;
+                                                    logMiddle.QualityStateStr = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Result");
+                                                    logMiddle.QualityOP30To1 = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Y-Maximum");//娑ㄦ柇鍔涚煩
                                                     break;
                                                 case "OP3002CH4":
-                                                    wplog = GetCH4Info(files[0].FullName, wplog);
-                                                    wplog.OP30QualityFilePathCH4 = files[0].FullName;
+                                                    logMiddle = GetCH4Info(files[0].FullName, logMiddle);
+                                                    logMiddle.OP30QualityFilePathCH4 = files[0].FullName;
                                                     break;
                                                 case "OP3002CH5":
-                                                    wplog = GetCH5Info(files[0].FullName, wplog);
-                                                    wplog.OP30QualityFilePathCH5 = files[0].FullName;
+                                                    logMiddle = GetCH5Info(files[0].FullName, logMiddle);
+                                                    logMiddle.OP30QualityFilePathCH5 = files[0].FullName;
                                                     break;
                                                 case "OP3002CH6":
-                                                    wplog.OP30QualityFilePathCH6 = files[0].FullName;
-                                                    wplog.QualityStateStr = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Result");
-                                                    wplog.QualityOP30To6 = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Y-Maximum");//琛鍘嬭鍔涚煩
-                                                    wplog.QualityOP30To7 = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Block X");//琛鍘嬭浣嶇Щ
+                                                    logMiddle.OP30QualityFilePathCH6 = files[0].FullName;
+                                                    logMiddle.QualityStateStr = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Result");
+                                                    logMiddle.QualityOP30To6 = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Y-Maximum");//琛鍘嬭鍔涚煩
+                                                    logMiddle.QualityOP30To7 = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Block X");//琛鍘嬭浣嶇Щ
                                                     break;
                                                 default:
                                                     break;
@@ -325,25 +327,25 @@
                                     }
                                     else if (WorkingProcedure.Equals("OP35"))
                                     {
-                                        if (wplog.OP35OK)
+                                        if (logMiddle.OP35OK)
                                         {
-                                            wplog.QualityStateStr = "OK";
+                                            logMiddle.QualityStateStr = "OK";
                                         }
                                         else
                                         {
-                                            wplog.QualityStateStr = "NG";
+                                            logMiddle.QualityStateStr = "NG";
                                         }
                                     }
                                     else if (WorkingProcedure.Equals("OP60"))
                                     {
                                         //澧炲姞OP60 璐ㄩ噺淇℃伅璇诲彇鏍¢獙 銆怑ditby shaocx,2024-06-07銆�
                                         var gongweiStr = DataCapturePointCode.Substring(DataCapturePointCode.Length - 1, 1);
-                                        if (wplog.Op60_Place_Flag == false)
+                                        if (logMiddle.Op60_Place_Flag == false)
                                         {
-                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},宸ヤ綅{gongweiStr}锛屼笉閫氳繃锛岃鍙朞p60_Place_Flag:false");
+                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚锛屾槸鎸囧畾鐨勫伐浠秢logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}锛屼笉閫氳繃锛岃鍙朞p60_Place_Flag:false");
                                             continue;
                                         };
-                                        Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},宸ヤ綅{gongweiStr}锛屾牎楠岄�氳繃锛岃鍙朞p60_Place_Flag:true");
+                                        Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚锛屾槸鎸囧畾鐨勫伐浠秢logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}锛屾牎楠岄�氳繃锛岃鍙朞p60_Place_Flag:true");
 
 
                                         var time = DateTimeHelper.GetDateTime();
@@ -363,22 +365,33 @@
                                         files = files.Where(x => x.Name.Contains("SP-" + gongweiStr)).OrderByDescending(o => o.LastWriteTime).ToList();//绛涢�夊彇鏈�鏂扮殑鏂囦欢 銆怑ditby shaocx,2024-06-19銆�
                                         if (files.Count() > 0)
                                         {
-                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢files.Count()}涓紝鏄寚瀹氱殑宸ヤ欢{wplog.WorkPieceID},,宸ヤ綅{gongweiStr}涓婃鑾峰彇灏间集涓佹枃浠堕噷鐨勬椂闂村��:{(op60QualityTime == null ? "" : op60QualityTime.ToString())}");
+                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢files.Count()}涓紝鏄寚瀹氱殑宸ヤ欢{logMiddle.WorkPieceID},,宸ヤ綅{gongweiStr}涓婃鑾峰彇灏间集涓佹枃浠堕噷鐨勬椂闂村��:{(op60QualityTime == null ? "" : op60QualityTime.ToString())}");
                                             List<OP60Info> op60Infos = new List<OP60Info>();
                                             bool isFindFile = false;
                                             //娉ㄦ剰锛氬彧鍙栫涓�涓枃浠跺氨鍙互鍟�!!!!!! 銆怑ditby shaocx,2024-06-19銆�
-                                            var doFiles = new List<FileInfo>() { files.First() };
+                                            var source_doFile = files.First();//鍘熷璇荤殑鏂囦欢
+
+                                            //鎷疯礉鏂囦欢
+                                            //鐩爣鏂囦欢鐨勫畬鏁寸洰褰�
+                                            string destFileName = source_doFile.FullName.Replace("Measuring_Data_dfq", "Measuring_Data_df_Copy");
+                                            string source_file_name = source_doFile.Name.Replace(".dfq", "");//涓嶅甫鎵╁睍鍚嶇殑鏂囦欢鍚嶅瓧
+                                            destFileName = destFileName.Replace(source_file_name, source_file_name + "_" + logMiddle.WorkPieceID + "_" + DateTime.Now.ToString("yyyyMMddHHmmss"));
+                                            File.Copy(source_doFile.FullName, destFileName, true);
+
+
+                                            FileInfo destFile = new FileInfo(destFileName);
+                                            var doFiles = new List<FileInfo>() { destFile };
                                             foreach (var file in doFiles)
                                             {//鍙栧�掑簭鍖归厤鐨勬枃浠跺悕涓哄伐浠跺彿鐨勬枃浠�
                                                 if (file.Name.Contains("SP-" + gongweiStr))
                                                 {
-                                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},,宸ヤ綅{gongweiStr}涓婃鑾峰彇灏间集涓佹枃浠堕噷鐨勬椂闂村��:{(op60QualityTime == null ? "" : op60QualityTime.ToString())}");
+                                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢logMiddle.WorkPieceID},,宸ヤ綅{gongweiStr}涓婃鑾峰彇灏间集涓佹枃浠堕噷鐨勬椂闂村��:{(op60QualityTime == null ? "" : op60QualityTime.ToString())}");
                                                     isFindFile = true;
                                                     var datatable = CSVHelper.ReadCSVList(file.FullName);
-                                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.Name}锛屾寚瀹氬伐浠跺彿{wplog.WorkPieceID},,宸ヤ綅{gongweiStr}鍙戠幇鏂囦欢琛屾暟{datatable.Count}");
+                                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.Name}锛屾寚瀹氬伐浠跺彿{logMiddle.WorkPieceID},,宸ヤ綅{gongweiStr}鍙戠幇鏂囦欢琛屾暟{datatable.Count}");
                                                     if (datatable.Count < 106)
                                                     {//璐ㄩ噺鏁版嵁浠�106琛屽紑濮�
-                                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.Name}锛屾寚瀹氬伐浠跺彿{wplog.WorkPieceID},,宸ヤ綅{gongweiStr}鍙戠幇鏂囦欢琛屾暟{datatable.Count}灏忎簬106");
+                                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.Name}锛屾寚瀹氬伐浠跺彿{logMiddle.WorkPieceID},,宸ヤ綅{gongweiStr}鍙戠幇鏂囦欢琛屾暟{datatable.Count}灏忎簬106");
                                                         continue;
                                                     }
                                                     datatable.Reverse();
@@ -418,44 +431,47 @@
                                                             //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},宸ヤ綅{gongweiStr}娌¤兘璧嬪�糘P60QualityFilePath绛夊瓧娈�,{msg}");
                                                             //    break;
                                                             //}
-                                                            wplog.QualityOP60To1 = op60Infos[0].value;
-                                                            wplog.QualityOP60To2 = op60Infos[1].value;
-                                                            wplog.OP60QualityFilePath = file.FullName;
-                                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},宸ヤ綅{gongweiStr}鎴愬姛璧嬪�间簡OP60QualityFilePath绛夊瓧娈碉紝璇诲彇鏃堕棿:{op60Infos[0].datetimeHandle.ToString()}");
+                                                            logMiddle.QualityOP60To1 = op60Infos[0].value;
+                                                            logMiddle.QualityOP60To2 = op60Infos[1].value;
+                                                            logMiddle.OP60QualityFilePath = file.FullName;
+                                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}鎴愬姛璧嬪�间簡OP60QualityFilePath绛夊瓧娈碉紝璇诲彇鏃堕棿:{op60Infos[0].datetimeHandle.ToString()}");
                                                             if (op60Infos[0].datetimeHandle > op60QualityTime.Value)
                                                             {//杩欎釜鏃堕棿鍒ゆ柇瑕佷笉瑕佹嬁鎺夛紵锛� 銆怑ditby shaocx,2024-06-19銆�
                                                             }
                                                             else
                                                             {
                                                                 var msg = $"锛屽彧鏄鍛婏紒鍥犱负鍒ゆ柇鏃堕棿涓嶇鍚堬紝op60Infos[0].datetimeHandle:{(op60Infos[0].datetimeHandle == null ? "" : op60Infos[0].datetimeHandle.ToString())}灏忎簬绛変簬op60QualityTime:{(op60QualityTime.Value == null ? "" : op60QualityTime.Value.ToString())}";
-                                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},宸ヤ綅{gongweiStr}娌¤兘璧嬪�糘P60QualityFilePath绛夊瓧娈�,{msg}");
+                                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}娌¤兘璧嬪�糘P60QualityFilePath绛夊瓧娈�,{msg}");
                                                             }
                                                         }
                                                         else
                                                         {
-                                                            wplog.QualityOP60To1 = op60Infos[0].value;
-                                                            wplog.QualityOP60To2 = op60Infos[1].value;
-                                                            wplog.OP60QualityFilePath = file.FullName;
-                                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},宸ヤ綅{gongweiStr}鎴愬姛璧嬪�间簡OP60QualityFilePath绛夊瓧娈碉紝璇诲彇鏃堕棿:{op60Infos[0].datetimeHandle.ToString()}");
+                                                            logMiddle.QualityOP60To1 = op60Infos[0].value;
+                                                            logMiddle.QualityOP60To2 = op60Infos[1].value;
+                                                            logMiddle.OP60QualityFilePath = file.FullName;
+                                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}鎴愬姛璧嬪�间簡OP60QualityFilePath绛夊瓧娈碉紝璇诲彇鏃堕棿:{op60Infos[0].datetimeHandle.ToString()}");
                                                         }
                                                         op60QualityTime = op60Infos[0].datetimeHandle;
+
+                                                       
+
                                                         break;
                                                     }
 
                                                 }
                                                 else
                                                 {
-                                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.Name}涓嶆槸鎸囧畾宸ヤ欢{wplog.WorkPieceID},宸ヤ綅{gongweiStr}");
+                                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.Name}涓嶆槸鎸囧畾宸ヤ欢{logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}");
                                                 }
                                             }
                                             if (isFindFile == false)
                                             {
-                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚娌℃湁鎵惧埌鏂囦欢,鎸囧畾宸ヤ欢{wplog.WorkPieceID},宸ヤ綅{gongweiStr}");
+                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚娌℃湁鎵惧埌鏂囦欢,鎸囧畾宸ヤ欢{logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}");
                                             }
                                         }
                                         else
                                         {
-                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚,閫氳繃绛涢�夎繃婊�,娌℃湁鎵惧埌鏂囦欢,鎸囧畾宸ヤ欢{wplog.WorkPieceID},宸ヤ綅{gongweiStr}");
+                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚,閫氳繃绛涢�夎繃婊�,娌℃湁鎵惧埌鏂囦欢,鎸囧畾宸ヤ欢{logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}");
                                         }
                                     }
                                     else if (WorkingProcedure.Equals("OP20"))
@@ -464,13 +480,13 @@
                                         //璁板綍鍏敤鍙橀噺锛屼繚瀛樼偣浣峂88鐨勪俊鎭� 銆怑ditby shaocx,2024-06-07銆�
                                         if (DataCapturePointCode.Contains("OP2002C"))
                                         {//浠嶰P2002C璇诲彇锛屽洜涓洪『搴忔槸 CBA锛岃�屼笉鏄疉BC
-                                            string sideValue = GetSideForOP20(plcService, wplog);
+                                            string sideValue = GetSideForOP20(plcService, logMiddle);
                                             SystemValue.OP20_Side_Value = sideValue;
                                         }
-                                        wplog.MonitoringPoint += SystemValue.OP20_Side_Value;
-                                        wplog.CreatedUserName = wplog.MonitoringPoint;
+                                        logMiddle.MonitoringPoint += SystemValue.OP20_Side_Value;
+                                        logMiddle.CreatedUserName = logMiddle.MonitoringPoint;
 
-                                        Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},宸ヤ綅{gongweiStr}锛屾牎楠岄�氳繃锛岃鍙朞p60_Place_Flag:true");
+                                        Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚锛屾槸鎸囧畾鐨勫伐浠秢logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}锛屾牎楠岄�氳繃锛岃鍙朞p60_Place_Flag:true");
 
                                         var time = DateTimeHelper.GetDateTime();
                                         if (fileFindTime == null)
@@ -488,12 +504,12 @@
                                         //娉ㄦ剰锛氫竴瀹氳绛涢�夊埗瀹氱殑鏂囦欢鏁版嵁
                                         files = files.Where(x => x.Name.Contains("SP-" + gongweiStr)).OrderByDescending(o => o.LastWriteTime).ToList();//绛涢�夊彇鏈�鏂扮殑鏂囦欢 銆怑ditby shaocx,2024-06-19銆�
 
-                                        Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"宸ヤ綅銆恵DataCapturePointCode}銆戝伐浠躲�恵wplog.WorkPieceID ?? "绌哄瓧绗�"}銆戣幏鍙栧埌銆恵files.Count()}銆戜釜鏂囦欢锛屻�恵fileFindTime.Value}銆戙�恵time.AddHours(2)}銆�");
+                                        Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"宸ヤ綅銆恵DataCapturePointCode}銆戝伐浠躲�恵logMiddle.WorkPieceID ?? "绌哄瓧绗�"}銆戣幏鍙栧埌銆恵files.Count()}銆戜釜鏂囦欢锛屻�恵fileFindTime.Value}銆戙�恵time.AddHours(2)}銆�");
 
                                         if (files.Count() > 0)
                                         {
                                             bool isFindFile = false;
-                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢files.Count()}涓紝鏄寚瀹氱殑宸ヤ欢{wplog.WorkPieceID},宸ヤ綅{gongweiStr},涓婃鑾峰彇灏间集涓佹枃浠堕噷鐨勬椂闂村��:{(op60QualityTime == null ? "" : op60QualityTime.ToString())}");
+                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢files.Count()}涓紝鏄寚瀹氱殑宸ヤ欢{logMiddle.WorkPieceID},宸ヤ綅{gongweiStr},涓婃鑾峰彇灏间集涓佹枃浠堕噷鐨勬椂闂村��:{(op60QualityTime == null ? "" : op60QualityTime.ToString())}");
                                             files = files.OrderByDescending(o => o.LastWriteTime).ToList();
                                             List<OP60Info> op60Infos = new List<OP60Info>();
                                             //娉ㄦ剰锛氬彧鍙栫涓�涓枃浠跺氨鍙互鍟�!!!!!! 銆怑ditby shaocx,2024-06-19銆�
@@ -503,13 +519,13 @@
                                                 if (file.Name.Contains("SP-" + gongweiStr))
                                                 {
                                                     isFindFile = true;
-                                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},宸ヤ綅{gongweiStr},涓婃鑾峰彇灏间集涓佹枃浠堕噷鐨勬椂闂村��:{(op60QualityTime == null ? "" : op60QualityTime.ToString())}");
+                                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢logMiddle.WorkPieceID},宸ヤ綅{gongweiStr},涓婃鑾峰彇灏间集涓佹枃浠堕噷鐨勬椂闂村��:{(op60QualityTime == null ? "" : op60QualityTime.ToString())}");
 
                                                     var datatable = CSVHelper.ReadCSVList(file.FullName);
-                                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.Name}锛屾寚瀹氬伐浠跺彿{wplog.WorkPieceID},,宸ヤ綅{gongweiStr}鍙戠幇鏂囦欢琛屾暟{datatable.Count}");
+                                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.Name}锛屾寚瀹氬伐浠跺彿{logMiddle.WorkPieceID},,宸ヤ綅{gongweiStr}鍙戠幇鏂囦欢琛屾暟{datatable.Count}");
                                                     if (datatable.Count < 57)
                                                     {//璐ㄩ噺鏁版嵁浠�106琛屽紑濮�
-                                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.Name}锛屾寚瀹氬伐浠跺彿{wplog.WorkPieceID},,宸ヤ綅{gongweiStr}鍙戠幇鏂囦欢琛屾暟{datatable.Count}灏忎簬106");
+                                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.Name}锛屾寚瀹氬伐浠跺彿{logMiddle.WorkPieceID},,宸ヤ綅{gongweiStr}鍙戠幇鏂囦欢琛屾暟{datatable.Count}灏忎簬106");
                                                         continue;
                                                     }
                                                     datatable.Reverse();
@@ -545,23 +561,23 @@
                                                             //{
                                                             //    break;
                                                             //}
-                                                            wplog.QualityOP20To1 = op60Infos[0].value;
-                                                            wplog.OP20QualityFilePath = file.FullName;
-                                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},宸ヤ綅{gongweiStr}鎴愬姛璧嬪�间簡OP20QualityFilePath绛夊瓧娈碉紝璇诲彇鏃堕棿:{op60Infos[0].datetimeHandle.ToString()}");
+                                                            logMiddle.QualityOP20To1 = op60Infos[0].value;
+                                                            logMiddle.OP20QualityFilePath = file.FullName;
+                                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}鎴愬姛璧嬪�间簡OP20QualityFilePath绛夊瓧娈碉紝璇诲彇鏃堕棿:{op60Infos[0].datetimeHandle.ToString()}");
                                                             if (op60Infos[0].datetimeHandle > op60QualityTime.Value)
                                                             {//杩欎釜鏃堕棿鍒ゆ柇瑕佷笉瑕佹嬁鎺夛紵锛� 銆怑ditby shaocx,2024-06-19銆�
                                                             }
                                                             else
                                                             {
                                                                 var msg = $"锛屽彧鏄鍛婏紒鍥犱负鍒ゆ柇鏃堕棿涓嶇鍚堬紝op60Infos[0].datetimeHandle:{(op60Infos[0].datetimeHandle == null ? "" : op60Infos[0].datetimeHandle.ToString())}灏忎簬绛変簬op60QualityTime:{(op60QualityTime.Value == null ? "" : op60QualityTime.Value.ToString())}";
-                                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},宸ヤ綅{gongweiStr}娌¤兘璧嬪�糘P60QualityFilePath绛夊瓧娈�,{msg}");
+                                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}娌¤兘璧嬪�糘P60QualityFilePath绛夊瓧娈�,{msg}");
                                                             }
                                                         }
                                                         else
                                                         {
-                                                            wplog.QualityOP20To1 = op60Infos[0].value;
-                                                            wplog.OP20QualityFilePath = file.FullName;
-                                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢wplog.WorkPieceID},宸ヤ綅{gongweiStr}鎴愬姛璧嬪�间簡OP20QualityFilePath绛夊瓧娈碉紝璇诲彇鏃堕棿:{op60Infos[0].datetimeHandle.ToString()}");
+                                                            logMiddle.QualityOP20To1 = op60Infos[0].value;
+                                                            logMiddle.OP20QualityFilePath = file.FullName;
+                                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}鎴愬姛璧嬪�间簡OP20QualityFilePath绛夊瓧娈碉紝璇诲彇鏃堕棿:{op60Infos[0].datetimeHandle.ToString()}");
                                                         }
                                                         op60QualityTime = op60Infos[0].datetimeHandle;
                                                         break;
@@ -570,18 +586,18 @@
                                                 }
                                                 else
                                                 {
-                                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.FullName}涓嶆槸鎸囧畾宸ヤ欢{wplog.WorkPieceID}");
+                                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.FullName}涓嶆槸鎸囧畾宸ヤ欢{logMiddle.WorkPieceID}");
                                                 }
                                             }
 
                                             if (isFindFile == false)
                                             {
-                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚娌℃湁鎵惧埌鏂囦欢,鎸囧畾宸ヤ欢{wplog.WorkPieceID},宸ヤ綅{gongweiStr}");
+                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚娌℃湁鎵惧埌鏂囦欢,鎸囧畾宸ヤ欢{logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}");
                                             }
                                         }
                                         else
                                         {
-                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚,閫氳繃绛涢�夎繃婊�,娌℃湁鎵惧埌鏂囦欢,鎸囧畾宸ヤ欢{wplog.WorkPieceID},宸ヤ綅{gongweiStr}");
+                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}涓嬬嚎瀹屾垚,閫氳繃绛涢�夎繃婊�,娌℃湁鎵惧埌鏂囦欢,鎸囧畾宸ヤ欢{logMiddle.WorkPieceID},宸ヤ綅{gongweiStr}");
                                         }
                                     }
 
@@ -592,8 +608,17 @@
                                     Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}娴嬮噺瀹屾垚璇诲彇鏂囦欢鏁版嵁鏃跺紓甯�,閬垮厤宸ュ簭瀹屾垚寮傚父锛�", ex);
                                 }
 
+                                //鏍规嵁璐ㄩ噺鏁版嵁鍒ゆ柇鏄惁鍚堟牸/涓嶅悎鏍� 銆怑ditby shaocx,2024-06-25銆�
+                                QualityNoOkEnum? qualityNoOkEnum = null;
+                                QualityState qualityState = CalcQualityStateForOP(logMiddle, ref qualityNoOkEnum);
+                                logMiddle.QualityState = (int)qualityState;
+                                if (qualityNoOkEnum != null)
+                                {
+                                    logMiddle.QualityNoOk = (int)qualityNoOkEnum;
+                                    logMiddle.QualityNoOkReason = qualityNoOkEnum.ToString();
+                                }
                                 //鏇存柊WorkPieceInfo琛ㄤ互鍙婃彃鍏orkPieceLog琛ㄥ拰WorkPieceInfoLog琛�
-                                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
+                                WorkPieceInfoManager.QualityInfoComplete(logMiddle, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                 threadStatusMonitor.Threadstatue = 1;
 
 
@@ -848,5 +873,88 @@
 
         }
 
+
+        /// <summary>
+        /// 璁$畻OP 璐ㄩ噺鏁版嵁鏄惁鍚堟牸
+        /// </summary>
+        public QualityState CalcQualityStateForOP(WorkPieceLogMiddle logMiddle, ref QualityNoOkEnum? qualityNoOkEnum)
+        {
+            QualityState qualityState = QualityState.Suspected;
+            if (logMiddle.WorkingProcedure == "OP60")
+            {
+                decimal _QualityOP60To1 = SystemHelper.GetDecimal(logMiddle.QualityOP60To1);
+                decimal _QualityOP60To2 = SystemHelper.GetDecimal(logMiddle.QualityOP60To2);
+                var isPass_QualityOP60To1 = false;
+                var isPass_QualityOP60To2 = false;
+
+
+                if (_QualityOP60To1 >= (decimal)53.018 && _QualityOP60To1 <= (decimal)53.030)
+                {
+                    isPass_QualityOP60To1 = true;
+                }
+                else
+                {
+                    qualityNoOkEnum = QualityNoOkEnum.OP60澶уご瀛旂洿寰勮秴宸�;
+                }
+                if (_QualityOP60To2 >= (decimal)22.005 && _QualityOP60To2 <= (decimal)22.011)
+                {
+                    isPass_QualityOP60To2 = true;
+                }
+                else
+                {
+                    qualityNoOkEnum = QualityNoOkEnum.OP60灏忓ご瀛旂洿寰勮秴宸�;
+                }
+
+                if (isPass_QualityOP60To1 && isPass_QualityOP60To2)
+                {
+                    qualityState = QualityState.OK;
+                }
+                else
+                {
+                    qualityState = QualityState.NG;
+                }
+                if (_QualityOP60To1 == 0 || _QualityOP60To2 == 0)
+                {
+                    qualityState = QualityState.Suspected;
+                    return qualityState;
+                }
+                return qualityState;
+            }
+            else if (logMiddle.WorkingProcedure == "OP10")
+            {
+                if (logMiddle.QualityState != (int)QualityState.OK)
+                {
+                    qualityNoOkEnum = QualityNoOkEnum.OP10鍘氬害瓒呭樊;
+                }
+                return qualityState;
+            }
+            else if (logMiddle.WorkingProcedure == "OP20")
+            {
+                if (logMiddle.QualityState != (int)QualityState.OK)
+                {
+                    qualityNoOkEnum = QualityNoOkEnum.OP20灏忓ご瀛旂洿寰勮秴宸�;
+                }
+                return qualityState;
+            }
+            else if (logMiddle.WorkingProcedure == "OP35")
+            {
+                if (logMiddle.QualityState != (int)QualityState.OK)
+                {
+                    qualityNoOkEnum = QualityNoOkEnum.OP35婊氬帇鍔涗笉鍚堟牸;
+                }
+                return qualityState;
+            }
+            else if (logMiddle.WorkingProcedure == "OP40")
+            {
+                if (logMiddle.QualityState != (int)QualityState.OK)
+                {
+                    qualityNoOkEnum = QualityNoOkEnum.OP40鍘氬害瓒呭樊;
+                }
+                return qualityState;
+            }
+            return qualityState;
+        }
+        
+
     }
 }
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_05.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_05.cs
index 84a3b68..a775440 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_05.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_05.cs
@@ -87,9 +87,6 @@
                     //plcService.OpenService();
                 }
                 string value_05 = "";
-                string path = ConfigHelper.GetConfigString("OP80QualityData");//OP80鐨勫湴鍧�
-                //string path = "C:\\Users\\SY-PC\\Desktop\\FO";//OP80鐨勫湴鍧�
-                DateTime? fileFindTime = null;
                 while (true)
                 {
                     threadStatusMonitor.ErrorMsg = "";
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/OP80QualityDataHandler.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/OP80QualityDataHandler.cs
index e14097d..a49b058 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/OP80QualityDataHandler.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/OP80QualityDataHandler.cs
@@ -167,21 +167,21 @@
 
                 Log4NetHelper.WriteInfoLog(logType, $"OP80涓嬬嚎瀹屾垚璇诲彇鍒版枃浠秢file.Name}锛屾槸鎸囧畾鐨勫伐浠秢pieceProcess.WorkPieceID}");
 
-                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
-                wplog.WorkPieceID = pieceProcess.WorkPieceID;
-                wplog.WorkingProcedure = query_WorkingProcedureCurrent;
-                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
-                wplog.EquipmentID = _dataCaptureConfig.EquipmentID; ;
-                wplog.Remarks = wplog.WorkingProcedure;
-                wplog.MonitoringPoint = _DataCapturePointCode;
-                wplog.CreatedTime = DateTimeHelper.GetDateTime();
-                wplog.CreatedUserName = _DataCapturePointCode;
-                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
-                wplog.UpdatedUserName = Environment.MachineName + "鑷姩" + Thread.CurrentThread.ManagedThreadId.ToString();
-                wplog.IsDeleted = false;
+                WorkPieceLogMiddle logMiddle = new WorkPieceLogMiddle();
+                logMiddle.WorkPieceID = pieceProcess.WorkPieceID;
+                logMiddle.WorkingProcedure = query_WorkingProcedureCurrent;
+                logMiddle.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+                logMiddle.EquipmentID = _dataCaptureConfig.EquipmentID; ;
+                logMiddle.Remarks = logMiddle.WorkingProcedure;
+                logMiddle.MonitoringPoint = _DataCapturePointCode;
+                logMiddle.CreatedTime = DateTimeHelper.GetDateTime();
+                logMiddle.CreatedUserName = _DataCapturePointCode;
+                logMiddle.UpdatedTime = DateTimeHelper.GetDateTime();
+                logMiddle.UpdatedUserName = Environment.MachineName + "鑷姩" + Thread.CurrentThread.ManagedThreadId.ToString();
+                logMiddle.IsDeleted = false;
 
                 WorkPieceLog loginfo2 = new WorkPieceLog();
-                loginfo2 = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLogMiddle>(wplog);
+                loginfo2 = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLogMiddle>(logMiddle);
 
                 var datatable = CSVHelper.ReadCSVList(file.FullName);
                 List<string> rowFirst = new List<string>();
@@ -243,93 +243,97 @@
                     {
                         if (oP80Info.OP80ItemStatusInfolist.Any(o => !o.鐘舵��.Equals("OK")))
                         {
-                            wplog.QualityStateStr = "NG";
+                            logMiddle.QualityStateStr = "NG";
                         }
                         else
                         {
-                            wplog.QualityStateStr = "OK";
+                            logMiddle.QualityStateStr = "OK";
                         }
                     }
                     else
                     {
-                        wplog.QualityStateStr = "OK";
+                        logMiddle.QualityStateStr = "OK";
                     }
 
 
-                    wplog.OP80QualityFilePath = file.FullName;
-                    wplog.OP80NewCode = oP80Info.鎵瑰彿?.Replace("#", "");
+                    logMiddle.OP80QualityFilePath = file.FullName;
+                    logMiddle.OP80NewCode = oP80Info.鎵瑰彿?.Replace("#", "");
                     //澶уご閲嶉噺
-                    wplog.QualityOP80To1 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Weight Big End")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80To1 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Weight Big End")).FirstOrDefault()?.缁濆鍊�;
                     //灏忓ご閲嶉噺
-                    wplog.QualityOP80To2 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Weight Small End")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80To2 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Weight Small End")).FirstOrDefault()?.缁濆鍊�;
                     //鎬婚噸
-                    wplog.QualityOP80To3 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Total Weight")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80To3 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Total Weight")).FirstOrDefault()?.缁濆鍊�;
                     //寮洸
-                    wplog.QualityOP80To4 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Bend to A")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80To4 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Bend to A")).FirstOrDefault()?.缁濆鍊�;
                     //鎵害
-                    wplog.QualityOP80To5 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Twist to A")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80To5 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Twist to A")).FirstOrDefault()?.缁濆鍊�;
                     //澶уご鍨傜洿搴�
-                    wplog.QualityOP80To6 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_C_Squareness")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80To6 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_C_Squareness")).FirstOrDefault()?.缁濆鍊�;
                     //灏忓ご鍨傜洿搴�
-                    wplog.QualityOP80To10 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Sma_End_C_Squareness")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80To10 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Sma_End_C_Squareness")).FirstOrDefault()?.缁濆鍊�;
                     //澶уご瀛斿垎缁勭骇鍒�
-                    wplog.QualityOP80To7 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Dime Big_End Class")).FirstOrDefault()?.鐘舵��;
+                    logMiddle.QualityOP80To7 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Dime Big_End Class")).FirstOrDefault()?.鐘舵��;
                     //灏忓ご瀛斿垎缁勭骇鍒�
-                    wplog.QualityOP80To8 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Dime Small_End Class")).FirstOrDefault()?.鐘舵��;
+                    logMiddle.QualityOP80To8 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Dime Small_End Class")).FirstOrDefault()?.鐘舵��;
                     //閲嶉噺缁勫埆
-                    wplog.QualityOP80To9 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Weight Class")).FirstOrDefault()?.鐘舵��;
+                    logMiddle.QualityOP80To9 = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Weight Class")).FirstOrDefault()?.鐘舵��;
                     //wplog.Remarks = (wplog.Remarks ?? "") + $"OP80涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.FullName},鏁版嵁銆恵wplog.OP80NewCode??"绌�"}銆戙�恵wplog.QualityOP80To1 ?? "绌�"}銆戙�恵wplog.QualityOP80To2 ?? "绌�"}銆戙�恵wplog.QualityOP80To3 ?? "绌�"}銆戙�恵wplog.QualityOP80To4 ?? "绌�"}銆戙�恵wplog.QualityOP80To5 ?? "绌�"}銆�";
 
                     //鏂板OP80鐨勪竴浜涜川閲忔暟鎹� 銆怑ditby shaocx,2024-06-13銆�
-                    wplog.QualityOP80_Houdu = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Thickness")).FirstOrDefault()?.缁濆鍊�;
-                    wplog.QualityOP80_ZXJ = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Distance of Two Head")).FirstOrDefault()?.缁濆鍊�;
-                    wplog.QualityOP80_DTKYZD = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Cylindricity")).FirstOrDefault()?.缁濆鍊�;
-                    wplog.QualityOP80_XTSMYD = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Top_Roundn")).FirstOrDefault()?.缁濆鍊�;
-                    wplog.QualityOP80_XTXMYD = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Bot_Roundn")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_Houdu = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Thickness")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_ZXJ = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Distance of Two Head")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_DTKYZD = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Cylindricity")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_XTSMYD = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Top_Roundn")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_XTXMYD = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Bot_Roundn")).FirstOrDefault()?.缁濆鍊�;
 
 
-                    wplog.QualityOP80_D_S_X = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Top_X_Dia.")).FirstOrDefault()?.缁濆鍊�;
-                    wplog.QualityOP80_D_S_Y = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Top_Y_Dia.")).FirstOrDefault()?.缁濆鍊�;
-                    wplog.QualityOP80_D_X_X = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Bot_X_Dia.")).FirstOrDefault()?.缁濆鍊�;
-                    wplog.QualityOP80_D_X_Y = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Bot_Y_Dia.")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_D_S_X = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Top_X_Dia.")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_D_S_Y = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Top_Y_Dia.")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_D_X_X = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Bot_X_Dia.")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_D_X_Y = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Big_End_Bot_Y_Dia.")).FirstOrDefault()?.缁濆鍊�;
                     //璁$畻澶уご瀛旂洿寰�,澶уご瀛旂洿寰�=锛堝ぇ澶翠笂闈鏂瑰悜鐩村緞+澶уご涓婇潰Y鏂瑰悜鐩村緞+澶уご涓嬮潰X鏂瑰悜鐩村緞+澶уご涓嬮潰Y鏂瑰悜鐩村緞锛�/4
                     List<decimal> valueList = new List<decimal>() {
-                                                        SystemHelper.GetDecimal(wplog.QualityOP80_D_S_X),
-                                                        SystemHelper.GetDecimal(wplog.QualityOP80_D_S_Y),
-                                                        SystemHelper.GetDecimal(wplog.QualityOP80_D_X_X),
-                                                        SystemHelper.GetDecimal(wplog.QualityOP80_D_X_Y),
+                                                        SystemHelper.GetDecimal(logMiddle.QualityOP80_D_S_X),
+                                                        SystemHelper.GetDecimal(logMiddle.QualityOP80_D_S_Y),
+                                                        SystemHelper.GetDecimal(logMiddle.QualityOP80_D_X_X),
+                                                        SystemHelper.GetDecimal(logMiddle.QualityOP80_D_X_Y),
                                                     };
-                    wplog.QualityOP80_D_TKZJ = SystemHelper.CalcDecimalAvg(valueList, 3);
+                    logMiddle.QualityOP80_D_TKZJ = SystemHelper.CalcDecimalAvg(valueList, 3);
 
 
-                    wplog.QualityOP80_X_S_X = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Top_X_Dia.")).FirstOrDefault()?.缁濆鍊�;
-                    wplog.QualityOP80_X_S_Y = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Top_Y_Dia.")).FirstOrDefault()?.缁濆鍊�;
-                    wplog.QualityOP80_X_X_X = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Bot_X_Dia.")).FirstOrDefault()?.缁濆鍊�;
-                    wplog.QualityOP80_X_X_Y = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Bot_Y_Dia.")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_X_S_X = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Top_X_Dia.")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_X_S_Y = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Top_Y_Dia.")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_X_X_X = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Bot_X_Dia.")).FirstOrDefault()?.缁濆鍊�;
+                    logMiddle.QualityOP80_X_X_Y = oP80Info.OP80ItemInfolist.Where(o => o.鍚嶇О.Equals("Small_End_Bot_Y_Dia.")).FirstOrDefault()?.缁濆鍊�;
                     //璁$畻灏忓ご瀛旂洿寰�,灏忓ご瀛旂洿寰�=锛堝皬澶翠笂闈鏂瑰悜鐩村緞+灏忓ご涓婇潰Y鏂瑰悜鐩村緞+灏忓ご涓嬮潰X鏂瑰悜鐩村緞+灏忓ご涓嬮潰Y鏂瑰悜鐩村緞锛�/4
                     valueList = new List<decimal>();
                     valueList = new List<decimal>() {
-                                                        SystemHelper.GetDecimal(wplog.QualityOP80_X_S_X),
-                                                        SystemHelper.GetDecimal(wplog.QualityOP80_X_S_Y),
-                                                        SystemHelper.GetDecimal(wplog.QualityOP80_X_X_X),
-                                                        SystemHelper.GetDecimal(wplog.QualityOP80_X_X_Y),
+                                                        SystemHelper.GetDecimal(logMiddle.QualityOP80_X_S_X),
+                                                        SystemHelper.GetDecimal(logMiddle.QualityOP80_X_S_Y),
+                                                        SystemHelper.GetDecimal(logMiddle.QualityOP80_X_X_X),
+                                                        SystemHelper.GetDecimal(logMiddle.QualityOP80_X_X_Y),
                                                     };
-                    wplog.QualityOP80_X_TKZJ = SystemHelper.CalcDecimalAvg(valueList, 3);
+                    logMiddle.QualityOP80_X_TKZJ = SystemHelper.CalcDecimalAvg(valueList, 3);
 
                 }
                 else
                 {
-                    wplog.Remarks = (wplog.Remarks ?? "") + $"OP80涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.FullName}寮傚父锛岃鏁颁笉鏄�2琛�";
+                    logMiddle.Remarks = (logMiddle.Remarks ?? "") + $"OP80涓嬬嚎瀹屾垚璇诲彇鏂囦欢{file.FullName}寮傚父锛岃鏁颁笉鏄�2琛�";
                 }
 
 
                 //鏇存柊WorkPieceInfo琛ㄤ互鍙婃彃鍏orkPieceLog琛ㄥ拰WorkPieceInfoLog琛�
-                info.OP80NewCode = wplog.OP80NewCode;//鏇存柊鎴愬搧鍚�
+                info.OP80NewCode = logMiddle.OP80NewCode;//鏇存柊鎴愬搧鍚�
 
-                info.QualityState = (int)((wplog.QualityStateStr.Equals("OK") || wplog.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
-                wplog.QualityState = info.QualityState;
-                info.QualityStateUpdateUser = wplog.UpdatedUserName;
-                info.QualityStateUpdateTime = wplog.UpdatedTime.Value.LocalDateTime;
+                info.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
+                logMiddle.QualityState = info.QualityState;
+                //璧嬪�间笉鍚堟牸鍘熷洜
+                //TODO:闇�瑕侀厤缃甇P80璐ㄩ噺涓嶅悎鏍肩殑鍘熷洜鏄暐锛燂紵
+                WorkPieceInfoManager.SetQualityNoOk_WorkPieceInfo(logMiddle, ref info);
+
+                info.QualityStateUpdateUser = logMiddle.UpdatedUserName;
+                info.QualityStateUpdateTime = logMiddle.UpdatedTime.Value.LocalDateTime;
                 info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
 
                 //var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == wplog.WorkPieceID).FirstOrDefault();
@@ -339,24 +343,24 @@
                 //    db.QualityDataInfo.Add(GetAddQualityDataInfo(qualityData));
                 //}
                 //淇敼QualityDataInfo琛� //閲嶅鏀跺埌璐ㄩ噺淇℃伅锛屼細瑕嗙洊涔嬪墠鐨�
-                EntityPropHelper<WorkPieceLogMiddle, QualityDataInfo>.CopyProp(wplog, qualityData, WorkPieceInfoManager.GetQualityDataInfoUpdate(wplog.WorkingProcedure, wplog.MonitoringPoint));//鎸囧畾淇敼瀛楁
+                EntityPropHelper<WorkPieceLogMiddle, QualityDataInfo>.CopyProp(logMiddle, qualityData, WorkPieceInfoManager.GetQualityDataInfoUpdate(logMiddle, logMiddle.WorkingProcedure, logMiddle.MonitoringPoint));//鎸囧畾淇敼瀛楁
 
                 qualityData.EquipmentID = _EquipmentId;
                 qualityData.QualityStateUpdateUser = info.UpdatedUserName;
                 qualityData.QualityReceiveTime = info.UpdatedTime.Value.LocalDateTime;
                 qualityData.QualityStateUpdateMode = info.QualityStateUpdateMode;
-                qualityData.OP80QualityState = wplog.QualityState.HasValue ? wplog.QualityState.Value.ToString() : "3";
+                qualityData.OP80QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                 qualityData.OP80QualityReceiveTime = DateTimeHelper.GetDateTime();
-                qualityData.OP80QualityFilePath = wplog.OP80QualityFilePath;
+                qualityData.OP80QualityFilePath = logMiddle.OP80QualityFilePath;
                 long op80id = qualityData.Id;
                 if (op80id > 0)
                 {
                     pieceProcess.QualityDataInfoID = op80id;
                 }
-                loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璐ㄩ噺锛歿wplog.QualityStateStr ?? "绌�"}";
+                loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"璐ㄩ噺锛歿logMiddle.QualityStateStr ?? "绌�"}";
                 if (!info.QualityState.Equals(((int)QualityState.OK).ToString()))
                 {
-                    info.QualityErrorInfo = $"{wplog.WorkingProcedure}宸ュ簭璐ㄩ噺閲囬泦鏁版嵁涓嶅悎鏍�";
+                    info.QualityErrorInfo = $"{logMiddle.WorkingProcedure}宸ュ簭璐ㄩ噺閲囬泦鏁版嵁涓嶅悎鏍�";
                 }
                 else
                 {
@@ -367,6 +371,10 @@
                 pieceProcess.GetQcDataFlag_Remark = "鎵惧埌鏂囦欢";
                 pieceProcess.GetQcDataFlag = 1;
                 pieceProcess.QualityState = info.QualityState.HasValue ? info.QualityState.Value : (int)QualityState.OK;
+                //璧嬪�间笉鍚堟牸鍘熷洜
+                //TODO:闇�瑕侀厤缃甇P80璐ㄩ噺涓嶅悎鏍肩殑鍘熷洜鏄暐锛燂紵
+                WorkPieceInfoManager.SetQualityNoOk_WorkPieceProcess(logMiddle, ref pieceProcess);
+
                 pieceProcess.EndTime = file.LastWriteTime;//涓嬬嚎鏃堕棿鏀逛负 鏂囦欢鏈�鍚庝慨鏀规椂闂� 銆怑ditby shaocx,2024-06-17銆�
 
                 db.WorkPieceLog.Add(WorkPieceInfoManager.GetAddWorkPieceLog(loginfo2));//鎻掑叆宸ヤ欢閲囬泦鏃ュ織琛�
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.cs
index 366bb6d..639e6e0 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.cs
@@ -1841,13 +1841,21 @@
                 {
                     switch (config.DataCapturePointCode)
                     {
-                        case "OP2002A":
-                            //case "OP2002B":
-                            //case "OP2002C":
+                        case "OP3002CH3":
+                        //case "OP3002CH4":
+                        //case "OP3002CH5":
+                        //case "OP3002CH6":
                             DataCaptureHandler_02 dc02 = new DataCaptureHandler_02();
                             dc02._dataCaptureConfig = config;
                             _dataCaptureHandler.Add(dc02);
                             break;
+                        //case "OP2002A":
+                        //    //case "OP2002B":
+                        //    //case "OP2002C":
+                        //    DataCaptureHandler_02 dc02 = new DataCaptureHandler_02();
+                        //    dc02._dataCaptureConfig = config;
+                        //    _dataCaptureHandler.Add(dc02);
+                        //    break;
                             //case "OP6002":
                             //    DataCaptureHandler_OP6002.Instance._dataCaptureConfig = config;
                             //    _dataCaptureHandler.Add(DataCaptureHandler_OP6002.Instance);
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/App.config b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/App.config
index 782af6f..53f82ee 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/App.config
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/App.config
@@ -6,5 +6,7 @@
   <appSettings>
     <add key="OP80QualityData_Test" value="X:\CA4GC20TD_Test\"/>
     <add key="OP60QualityData_Test" value="Q:\Measuring_Data_df_Test\"/>
+    <add key="OP60QualityData_Zhengshi" value="Q:\Measuring_Data_dfq\"/>
+    <add key="OP60QualityData_Test_Localhost" value="D:\鏁扮�涗俊鎭鎶�\鍏徃椤圭洰\DF22001-涓�姹借繛鏉嗛」鐩甛鏄犲皠鐩樻枃浠禱OP60锛堝凹浼竵锛塡"/>
   </appSettings>
 </configuration>
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 141a16a..b796720 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.Designer.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.Designer.cs
@@ -30,6 +30,7 @@
         {
             this.button1 = new System.Windows.Forms.Button();
             this.button2 = new System.Windows.Forms.Button();
+            this.button3 = new System.Windows.Forms.Button();
             this.SuspendLayout();
             // 
             // button1
@@ -52,11 +53,22 @@
             this.button2.UseVisualStyleBackColor = true;
             this.button2.Click += new System.EventHandler(this.button2_Click);
             // 
+            // button3
+            // 
+            this.button3.Location = new System.Drawing.Point(76, 234);
+            this.button3.Name = "button3";
+            this.button3.Size = new System.Drawing.Size(244, 54);
+            this.button3.TabIndex = 2;
+            this.button3.Text = "OP60娴嬭瘯璇诲彇鏂囦欢锛堟湰鍦帮級";
+            this.button3.UseVisualStyleBackColor = true;
+            this.button3.Click += new System.EventHandler(this.button3_Click);
+            // 
             // Form1
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.ClientSize = new System.Drawing.Size(800, 450);
+            this.Controls.Add(this.button3);
             this.Controls.Add(this.button2);
             this.Controls.Add(this.button1);
             this.Name = "Form1";
@@ -69,6 +81,7 @@
 
         private System.Windows.Forms.Button button1;
         private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Button button3;
     }
 }
 
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.cs
index 1b28878..b28acd6 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_FormTest/Form1.cs
@@ -68,5 +68,35 @@
                 MessageBox.Show("寮傚父:" + ex.Message);
             }
         }
+
+        private void button3_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                string path = ConfigHelper.GetConfigString("OP60QualityData_Zhengshi");
+
+                var newFiles = FileHelper.DetectNewFiles(path, "*.dfq", 300, DateTime.Now.AddDays(-100), DateTime.Now.AddDays(1));
+
+                foreach (System.IO.FileInfo source_doFile in newFiles)
+                {
+                    //MessageBox.Show("鎵惧埌FullName:" + source_doFile.FullName+ ",Name:" + source_doFile.Name);
+
+                    //鐩爣鏂囦欢鐨勫畬鏁寸洰褰�
+                    string destFileName = source_doFile.FullName.Replace("Measuring_Data_dfq", "Measuring_Data_df_Copy");
+                    string source_file_name = source_doFile.Name.Replace(".dfq", "");//涓嶅甫鎵╁睍鍚嶇殑鏂囦欢鍚嶅瓧
+                    destFileName = destFileName.Replace(source_file_name, source_file_name + "_"  + "_" + DateTime.Now.ToString("yyyyMMddHHmmss"));
+                    File.Copy(source_doFile.FullName, destFileName, true);
+
+                    //FileInfo destFile = new FileInfo(destFileName);
+                    //MessageBox.Show("鏂版枃浠舵壘鍒癋ullName:" + destFile.FullName + ",Name:" + destFile.Name);
+                }
+
+                MessageBox.Show("鎴愬姛");
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show("寮傚父:" + ex.Message);
+            }
+        }
     }
 }
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/Enums.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/Enums.cs
index a75543a..13a1c6a 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/Enums.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/Enums.cs
@@ -79,6 +79,28 @@
         /// </summary>
         Suspected = 3
     }
+
+    /// <summary>
+    /// 涓嶅悎鏍煎師鍥� 銆怑ditby shaocx,2024-06-26銆�
+    /// </summary>
+    public enum QualityNoOkEnum
+    {
+  
+
+        OP10鍘氬害瓒呭樊 = 2,
+        OP20灏忓ご瀛旂洿寰勮秴宸� = 3,
+        OP30娑ㄦ柇宸ヤ綅鍔涚煩澶� = 4,
+        OP35婊氬帇鍔涗笉鍚堟牸 = 5,
+        OP40鍘氬害瓒呭樊 = 6,
+        OP60灏忓ご瀛旂洿寰勮秴宸� = 8,
+        OP80灏哄瓒呭樊 = 10,
+        OP30棰勬嫥绱у伐浣嶅姏鐭╁ぇ = 11,
+        OP30缁堟嫥绱у伐浣嶅姏鐭╁ぇ = 12,
+        OP30鍘嬭‖濂楀伐浣嶅姏鐭╁ぇ = 13,
+        OP60澶уご瀛旂洿寰勮秴宸� = 14,
+        OP80閲嶉噺瓒呭樊 = 15,
+    }
+
     /// <summary>
     /// 璐ㄩ噺鐘舵�佷慨鏀规柟寮�
     /// </summary>
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/MiddleModel/WorkPieceLogMiddle.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/MiddleModel/WorkPieceLogMiddle.cs
index 6ecde99..51878eb 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/MiddleModel/WorkPieceLogMiddle.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/MiddleModel/WorkPieceLogMiddle.cs
@@ -241,10 +241,14 @@
 
         public string QualityOP35To2 { get; set; }
 
-
+        /// <summary>
+        /// 澶уご瀛旂洿寰�
+        /// </summary>
         public string QualityOP60To1 { get; set; }
 
-
+        /// <summary>
+        /// 灏忓ご瀛旂洿寰�
+        /// </summary>
         public string QualityOP60To2 { get; set; }
 
 
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfo.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfo.cs
index c6bd10e..a7ff257 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfo.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfo.cs
@@ -302,6 +302,73 @@
 
         #endregion
 
+        #region 新增 不合格原因 【Editby shaocx,2024-06-26】
+
+        /// OP10质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP10 { get; set; }
+
+        /// <summary>
+        /// OP10质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP10 { get; set; }
+
+        /// OP20质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP20 { get; set; }
+
+        /// <summary>
+        /// OP20质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP20 { get; set; }
+
+        /// OP30质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP30 { get; set; }
+
+        /// <summary>
+        /// OP30质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP30 { get; set; }
+
+        /// OP35质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP35 { get; set; }
+
+        /// <summary>
+        /// OP35质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP35 { get; set; }
+
+        /// OP40质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP40 { get; set; }
+
+        /// <summary>
+        /// OP40质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP40 { get; set; }
+
+
+        /// OP60质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP60 { get; set; }
+
+        /// <summary>
+        /// OP60质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP60 { get; set; }
+
+        /// OP80质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP80 { get; set; }
+
+        /// <summary>
+        /// OP80质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP80 { get; set; }
+
+        #endregion
     }
 
     /// <summary>
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfoLog.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfoLog.cs
index 4f8f792..133f82e 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfoLog.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfoLog.cs
@@ -300,5 +300,73 @@
         #endregion
 
         #endregion
+
+        #region 新增 不合格原因 【Editby shaocx,2024-06-26】
+
+        /// OP10质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP10 { get; set; }
+
+        /// <summary>
+        /// OP10质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP10 { get; set; }
+
+        /// OP20质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP20 { get; set; }
+
+        /// <summary>
+        /// OP20质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP20 { get; set; }
+
+        /// OP30质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP30 { get; set; }
+
+        /// <summary>
+        /// OP30质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP30 { get; set; }
+
+        /// OP35质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP35 { get; set; }
+
+        /// <summary>
+        /// OP35质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP35 { get; set; }
+
+
+        /// OP40质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP40 { get; set; }
+
+        /// <summary>
+        /// OP40质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP40 { get; set; }
+
+        /// OP60质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP60 { get; set; }
+
+        /// <summary>
+        /// OP60质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP60 { get; set; }
+
+        /// OP80质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk_OP80 { get; set; }
+
+        /// <summary>
+        /// OP80质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason_OP80 { get; set; }
+
+        #endregion
     }
 }
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfo.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfo.cs
index 11eac1c..a27edd5 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfo.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfo.cs
@@ -70,8 +70,21 @@
         [StringLength(2)]
         public string WorkPieceIDTo7 { get; set; }
 
+        /// <summary>
+        /// 质量状态,枚举 QualityState
+        /// </summary>
         public int? QualityState { get; set; }
 
+        /// <summary>
+        /// 质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk { get; set; }
+
+        /// <summary>
+        /// 质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason { get; set; }
+
         [StringLength(255)]
         public string QualityErrorInfo { get; set; }
 
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfoLog.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfoLog.cs
index 0251341..106b128 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfoLog.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfoLog.cs
@@ -74,6 +74,16 @@
 
         public int QualityState { get; set; }
 
+        /// <summary>
+        /// 质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk { get; set; }
+
+        /// <summary>
+        /// 质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason { get; set; }
+
         [StringLength(255)]
         public string QualityErrorInfo { get; set; }
 
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceLog.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceLog.cs
index 852cdf4..571bdfa 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceLog.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceLog.cs
@@ -44,6 +44,16 @@
 
         public int? QualityState { get; set; }
 
+        /// <summary>
+        /// 质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk { get; set; }
+
+        /// <summary>
+        /// 质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason { get; set; }
+
         [StringLength(32)]
         public string EquipmentID { get; set; }
 
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceProcess.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceProcess.cs
index f58e705..b5784a1 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceProcess.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceProcess.cs
@@ -27,8 +27,21 @@
         [Column(TypeName = "datetime2")]
         public DateTime EndTime { get; set; }
 
+        /// <summary>
+        /// 质量状态,使用枚举  QualityState
+        /// </summary>
         public int QualityState { get; set; }
 
+        /// <summary>
+        /// 质量不合格原因类型,枚举QualityNoOkEnum 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public int? QualityNoOk { get; set; }
+
+        /// <summary>
+        /// 质量不合格原因 【Editby shaocx,2024-06-26】
+        /// </summary>
+        public string QualityNoOkReason { get; set; }
+
         public long QualityDataInfoID { get; set; }
 
         public DateTimeOffset? CreatedTime { get; set; }
diff --git a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs
index c75baab..9095685 100644
--- a/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs
+++ b/DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs
@@ -1,4 +1,6 @@
-锘縰sing iWare_SCADA_BusinessLogical.Utils;
+锘縰sing iWare_SCADA_BusinessLogical.BLL;
+using iWare_SCADA_BusinessLogical.Utils;
+using iWare_SCADA_Model;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using System;
 using System.Collections.Generic;
@@ -47,5 +49,21 @@
 
             string cc = bb[0];
         }
+
+        [TestMethod]
+        public void zzz()
+        {
+            WorkPieceLogMiddle logMiddle = new WorkPieceLogMiddle(
+               )
+            {
+                WorkingProcedure = "OP30"
+            }
+            ;
+            QualityDataInfo qualityData = new QualityDataInfo();
+            //淇敼QualityDataInfo琛� //閲嶅鏀跺埌璐ㄩ噺淇℃伅锛屼細瑕嗙洊涔嬪墠鐨�
+            EntityPropHelper<WorkPieceLogMiddle, QualityDataInfo>.CopyProp(logMiddle, qualityData, WorkPieceInfoManager.GetQualityDataInfoUpdate(logMiddle, logMiddle.WorkingProcedure, logMiddle.MonitoringPoint));//鎸囧畾淇敼瀛楁
+
+            string cc = "";
+        }
     }
 }
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 2eac1c9..1baa7cb 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
@@ -61,6 +61,10 @@
       <Project>{32708f19-fe1a-48f5-b373-8e1c776f216c}</Project>
       <Name>iWare_SCADA_BusinessLogical</Name>
     </ProjectReference>
+    <ProjectReference Include="..\iWare_SCADA_Model\iWare_SCADA_Model.csproj">
+      <Project>{91C185DE-15AB-44AE-B585-53799FC51BE0}</Project>
+      <Name>iWare_SCADA_Model</Name>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

--
Gitblit v1.9.3