schangxiang@126.com
2024-09-04 35f78d6371d884271e5f9873a5193bf979fc2c1d
优化
已修改10个文件
164 ■■■■ 文件已修改
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_02.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP0501.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/HMI_WorkpieceWrite.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/OP80QualityDataHandler.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Enums/PieceLogTypeEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/QualityStateHelper.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/WorkPieceProcessHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/Enums.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs
@@ -178,13 +178,13 @@
                            //EntityPropHelper<WorkPieceLog, WorkPieceInfo>.CopyProp(loginfo, info, loginfo.GetWorkPieceInfoDict());
                            if (!loginfo.WorkingProcedure.Equals("OP05"))
                            {//当工件二维码第一次出现的工序不是OP05,则设置为可疑状态
                                info.QualityState = (int)QualityState.Suspected;
                                info.QualityState = (int)QualityStateEnum.Suspected;
                                info.QualityErrorInfo = $"工件二维码第一次出现的工序{loginfo.MonitoringPoint}不是OP05,数据缺失,请确认情况并做相应处理!";
                                info.Remarks = $"工件二维码第一次出现的工序{loginfo.WorkingProcedure}不是OP05,数据缺失,请确认情况并做相应处理!";
                            }
                            else
                            {
                                info.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值 //默认合格,OP05默认是合格
                                info.QualityState = (int)QualityStateEnum.OK;//此处需要注意,判断所有工序质量,然后再赋值 //默认合格,OP05默认是合格
                                info.Remarks = "OP05新增工件信息";
                            }
                            info.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime();
@@ -260,7 +260,7 @@
                            if (new_process.WorkingProcedureCurrent == WorkingProcedureForHMI.OP70.ToString())
                            { //特殊处理OP70,因为OP70没有测量,默认合格 [Editby shaocx,2024-07-03]
                                new_process.QualityState = (int)QualityState.OK;//默认合格,OP70默认是合格
                                new_process.QualityState = (int)QualityStateEnum.OK;//默认合格,OP70默认是合格
                            }
                            new_process.Id = Yitter.IdGenerator.YitIdHelper.NextId();
@@ -298,11 +298,11 @@
                            string message = "";
                            checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, loginfo, type);
                            if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityState.OK)
                            if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityStateEnum.OK)
                            {
                                plcFlag = false;
                                message = !checkQualityInfoCompleteFlag ? "跳序," : "";
                                message += info.QualityState != (int)QualityState.OK ? "质量不符合" : "";
                                message += info.QualityState != (int)QualityStateEnum.OK ? "质量不符合" : "";
                            }
                            ////反馈给PLC,(写入点待定)
                            //MessageModel fr = null;
@@ -553,13 +553,13 @@
                                //EntityPropHelper<WorkPieceLog, WorkPieceInfo>.CopyProp(loginfo, info, loginfo.GetWorkPieceInfoDict());
                                if (!logMiddle.WorkingProcedure.Equals("OP05"))
                                {//当工件二维码第一次出现的工序不是OP05,则设置为可疑状态
                                    pieceInfo.QualityState = (int)QualityState.Suspected;
                                    pieceInfo.QualityState = (int)QualityStateEnum.Suspected;
                                    pieceInfo.QualityErrorInfo = $"工件二维码第一次出现的工序{logMiddle.MonitoringPoint}不是OP05,数据缺失,请确认情况并做相应处理!";
                                    pieceInfo.Remarks = $"工件二维码第一次出现的工序{logMiddle.WorkingProcedure}不是OP05,数据缺失,请确认情况并做相应处理!";
                                }
                                else
                                {
                                    pieceInfo.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值 //默认合格,OP05默认是合格
                                    pieceInfo.QualityState = (int)QualityStateEnum.OK;//此处需要注意,判断所有工序质量,然后再赋值 //默认合格,OP05默认是合格
                                    pieceInfo.Remarks = "OP05新增工件信息";
                                }
                                pieceInfo.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime();
@@ -637,12 +637,12 @@
                        {//工序开始时间没有则赋值
                            pieceInfo.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();
                        }
                        pieceInfo.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
                        pieceInfo.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityStateEnum.OK : QualityStateEnum.NG);
                        //赋值不合格原因
                        SetQualityNoOk_WorkPieceInfo(logMiddle, ref pieceInfo);
                        if (!pieceInfo.QualityState.Equals(((int)QualityState.OK).ToString()))
                        if (!pieceInfo.QualityState.Equals(((int)QualityStateEnum.OK).ToString()))
                        {
                            pieceInfo.QualityErrorInfo = $"{logMiddle.WorkingProcedure}工序质量采集数据不合格{pieceInfo.QualityState}";
                        }
@@ -699,7 +699,7 @@
                                    qualityData.OP30QualityStateCH3 = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                                    qualityData.OP30QualityReceiveTimeCH3 = DateTimeHelper.GetDateTime();
                                    if (qualityData.OP30QualityStateCH3 == ((int)QualityState.NG).ToString())
                                    if (qualityData.OP30QualityStateCH3 == ((int)QualityStateEnum.NG).ToString())
                                    {
                                        logMiddle.QualityNoOk = (int)QualityNoOkEnum.OP30涨断工位力矩超差;
                                        logMiddle.QualityNoOkReason = QualityNoOkEnum.OP30涨断工位力矩超差.ToString();
@@ -713,7 +713,7 @@
                                    qualityData.OP30QualityStateCH4 = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                                    qualityData.OP30QualityReceiveTimeCH4 = DateTimeHelper.GetDateTime();
                                    if (qualityData.OP30QualityStateCH4 == ((int)QualityState.NG).ToString())
                                    if (qualityData.OP30QualityStateCH4 == ((int)QualityStateEnum.NG).ToString())
                                    {
                                        logMiddle.QualityNoOk = (int)QualityNoOkEnum.OP30预拧紧工位力矩超差;
                                        logMiddle.QualityNoOkReason = QualityNoOkEnum.OP30预拧紧工位力矩超差.ToString();
@@ -727,7 +727,7 @@
                                    qualityData.OP30QualityStateCH5 = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                                    qualityData.OP30QualityReceiveTimeCH5 = DateTimeHelper.GetDateTime();
                                    if (qualityData.OP30QualityStateCH5 == ((int)QualityState.NG).ToString())
                                    if (qualityData.OP30QualityStateCH5 == ((int)QualityStateEnum.NG).ToString())
                                    {
                                        logMiddle.QualityNoOk = (int)QualityNoOkEnum.OP30终拧紧工位力矩超差;
                                        logMiddle.QualityNoOkReason = QualityNoOkEnum.OP30终拧紧工位力矩超差.ToString();
@@ -741,7 +741,7 @@
                                    qualityData.OP30QualityStateCH6 = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                                    qualityData.OP30QualityReceiveTimeCH6 = DateTimeHelper.GetDateTime();
                                    if (qualityData.OP30QualityStateCH6 == ((int)QualityState.NG).ToString())
                                    if (qualityData.OP30QualityStateCH6 == ((int)QualityStateEnum.NG).ToString())
                                    {
                                        logMiddle.QualityNoOk = (int)QualityNoOkEnum.OP30压衬套工位力矩超差;
                                        logMiddle.QualityNoOkReason = QualityNoOkEnum.OP30压衬套工位力矩超差.ToString();
@@ -845,7 +845,7 @@
                        if (logMiddle.QualityType != null && logMiddle.QualityType.Equals(QualityType.SPC.ToString()))
                        {//SPC反馈,
                            if (logMiddle.QualityState != (int)QualityState.OK)
                            if (logMiddle.QualityState != (int)QualityStateEnum.OK)
                            {
                                //当某到工序检测到不合格工件时,从该工件加工完成时刻前指定时间起至报检不合格时间止,系统将该工件的最后加工工序在该时间段内加工的所有工件、正在加工的工件、该工序入口处的第一个工件全部标记为疑似状态,由人工复检工件并修改状态,并支持批量变更。
                                //答复:在线测量不需要走这个流程,只有SPC抽检才需要,需要把这时间段的工件全部置为疑似,哪怕是已完成工件
@@ -1034,8 +1034,8 @@
                        if (loginfo.WorkingProcedure.Equals("OP35"))
                        {//为了解决OP35的采集到的质量信息是OK还NOOK的情况,OP35 NOOK时更新质量信息
                            loginfo2.Remarks = $"OP35NOOK原质量信息{(cur_db_info.QualityState.HasValue ? cur_db_info.QualityState.Value.ToString() : "空")}";
                            cur_db_info.QualityState = (int)QualityState.NG;
                            if (!cur_db_info.QualityState.Equals(((int)QualityState.OK).ToString()))
                            cur_db_info.QualityState = (int)QualityStateEnum.NG;
                            if (!cur_db_info.QualityState.Equals(((int)QualityStateEnum.OK).ToString()))
                            {
                                cur_db_info.QualityErrorInfo = $"{loginfo.WorkingProcedure}工序质量NOOK采集数据不合格{cur_db_info.QualityState}";
                            }
@@ -1193,7 +1193,7 @@
                        QualityStateHelper.ResetQualityNoOkForNewProcess(ref process);
                        process.StartTime = DateTimeHelper.GetDateTime();
                        process.OperationType = OperationType.SPC.ToString();
                        process.QualityState = (int)QualityState.Suspected;
                        process.QualityState = (int)QualityStateEnum.Suspected;
                        process.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                        process.CreatedUserName = loginfo.MonitoringPoint;
                        process.DataCapturePointCname = loginfo.DataCapturePointCname;
@@ -1269,7 +1269,7 @@
            {
                if (logMiddle.WorkingProcedure.Equals("OP70"))
                {
                    logMiddle.QualityState = (int)QualityState.OK; //如果是OP70,则默认是合格 【Editby shaocx,2024-06-25】
                    logMiddle.QualityState = (int)QualityStateEnum.OK; //如果是OP70,则默认是合格 【Editby shaocx,2024-06-25】
                }
                WorkPieceLog loginfo2 = new WorkPieceLog();
@@ -1294,13 +1294,13 @@
                            //EntityPropHelper<WorkPieceLog, WorkPieceInfo>.CopyProp(loginfo, info, loginfo.GetWorkPieceInfoDict());
                            if (!logMiddle.WorkingProcedure.Equals("OP05"))
                            {//当工件二维码第一次出现的工序不是OP05,则设置为可疑状态
                                db_info.QualityState = (int)QualityState.Suspected;
                                db_info.QualityState = (int)QualityStateEnum.Suspected;
                                db_info.QualityErrorInfo = $"工件二维码第一次出现的工序{logMiddle.MonitoringPoint}不是OP05,数据缺失,请确认情况并做相应处理!";
                                db_info.Remarks = $"工件二维码第一次出现的工序{logMiddle.MonitoringPoint}不是OP05,数据缺失,请确认情况并做相应处理!";
                            }
                            else
                            {
                                db_info.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值 //默认合格,OP05默认是合格
                                db_info.QualityState = (int)QualityStateEnum.OK;//此处需要注意,判断所有工序质量,然后再赋值 //默认合格,OP05默认是合格
                                db_info.Remarks = "OP05新增工件信息";
                            }
                            db_info.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime();//WorkPieceInitOnlineTime
@@ -1383,7 +1383,7 @@
                        else if (logMiddle.WorkingProcedure.Equals("OP30"))
                        {
                            db_info.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
                            db_info.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityStateEnum.OK : QualityStateEnum.NG);
                            logMiddle.QualityState = db_info.QualityState;
                            db_info.QualityStateUpdateUser = logMiddle.UpdatedUserName;
                            db_info.QualityStateUpdateTime = logMiddle.UpdatedTime.Value.LocalDateTime;
@@ -1401,7 +1401,7 @@
                            qualityData.OP30QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value.ToString() : "3";
                            qualityData.OP30QualityReceiveTime = DateTimeHelper.GetDateTime();
                            loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"质量:{logMiddle.QualityStateStr ?? "空"}";
                            if (!db_info.QualityState.Equals(((int)QualityState.OK).ToString()))
                            if (!db_info.QualityState.Equals(((int)QualityStateEnum.OK).ToString()))
                            {
                                db_info.QualityErrorInfo = $"{logMiddle.WorkingProcedure}工序质量采集数据不合格";
                            }
@@ -2577,11 +2577,11 @@
        public static void SetLogMiddleForQuality(ref WorkPieceLogMiddle logMiddle)
        {
            logMiddle.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
            logMiddle.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityStateEnum.OK : QualityStateEnum.NG);
            //根据质量数据判断是否合格/不合格 【Editby shaocx,2024-06-25】
            QualityNoOkEnum? qualityNoOkEnum = null;
            QualityState qualityState = WorkPieceInfoManager.CalcQualityStateForOP(logMiddle, ref qualityNoOkEnum);
            QualityStateEnum qualityState = WorkPieceInfoManager.CalcQualityStateForOP(logMiddle, ref qualityNoOkEnum);
            logMiddle.QualityState = (int)qualityState;
            logMiddle.QualityStateStr = qualityState.ToString();
            if (qualityNoOkEnum != null)
@@ -2594,9 +2594,9 @@
        /// <summary>
        /// 计算OP 质量数据是否合格
        /// </summary>
        private static QualityState CalcQualityStateForOP(WorkPieceLogMiddle logMiddle, ref QualityNoOkEnum? qualityNoOkEnum)
        private static QualityStateEnum CalcQualityStateForOP(WorkPieceLogMiddle logMiddle, ref QualityNoOkEnum? qualityNoOkEnum)
        {
            QualityState qualityState = QualityState.Suspected;
            QualityStateEnum qualityState = QualityStateEnum.Suspected;
            if (logMiddle.WorkingProcedure == "OP60")
            {//合格/不合格由 WMS自行判断
                decimal _QualityOP60To1 = SystemHelper.GetDecimal(logMiddle.QualityOP60To1);
@@ -2624,24 +2624,24 @@
                if (isPass_QualityOP60To1 && isPass_QualityOP60To2)
                {
                    qualityState = QualityState.OK;
                    qualityState = QualityStateEnum.OK;
                }
                else
                {
                    qualityState = QualityState.NG;
                    qualityState = QualityStateEnum.NG;
                }
                if (_QualityOP60To1 == 0 || _QualityOP60To2 == 0)
                {
                    qualityState = QualityState.Suspected;
                    qualityState = QualityStateEnum.Suspected;
                    return qualityState;
                }
                return qualityState;
            }
            else if (logMiddle.WorkingProcedure == "OP80")
            {//合格/不合格由 OP80 判断,QualityState 和 QualityStateStr 都在调用当前方法前 写入值了
                if (logMiddle.QualityState == (int)QualityState.OK)
                if (logMiddle.QualityState == (int)QualityStateEnum.OK)
                {
                    qualityState = QualityState.OK;
                    qualityState = QualityStateEnum.OK;
                    return qualityState;
                }
@@ -2728,25 +2728,25 @@
            }
            else if (logMiddle.WorkingProcedure == "OP10")
            {//合格/不合格由 QualityStateStr值判断
                if (logMiddle.QualityState == (int)QualityState.NG)
                if (logMiddle.QualityState == (int)QualityStateEnum.NG)
                {
                    qualityNoOkEnum = QualityNoOkEnum.OP10厚度超差;
                }
                else
                {
                    qualityState = QualityState.OK;
                    qualityState = QualityStateEnum.OK;
                }
                return qualityState;
            }
            else if (logMiddle.WorkingProcedure == "OP20")
            {//合格/不合格由 QualityStateStr值判断
                if (logMiddle.QualityState == (int)QualityState.NG)
                if (logMiddle.QualityState == (int)QualityStateEnum.NG)
                {
                    qualityNoOkEnum = QualityNoOkEnum.OP20小头孔直径超差;
                }
                else
                {
                    qualityState = QualityState.OK;
                    qualityState = QualityStateEnum.OK;
                }
                return qualityState;
            }
@@ -2754,35 +2754,35 @@
            {//合格/不合格由 QualityStateStr值判断
                if (logMiddle.QualityStateStr.Equals("OK"))
                {
                    qualityState = QualityState.OK;
                    qualityState = QualityStateEnum.OK;
                }
                else
                {
                    qualityState = QualityState.NG;
                    qualityState = QualityStateEnum.NG;
                }
                return qualityState;
            }
            else if (logMiddle.WorkingProcedure == "OP35")
            {//合格/不合格由 QualityStateStr值判断
                if (logMiddle.QualityState == (int)QualityState.NG)
                if (logMiddle.QualityState == (int)QualityStateEnum.NG)
                {
                    qualityNoOkEnum = QualityNoOkEnum.OP35滚压力超差;
                }
                else
                {
                    qualityState = QualityState.OK;
                    qualityState = QualityStateEnum.OK;
                }
                return qualityState;
            }
            else if (logMiddle.WorkingProcedure == "OP40")
            {//合格/不合格由 QualityStateStr值判断
                if (logMiddle.QualityState == (int)QualityState.NG)
                if (logMiddle.QualityState == (int)QualityStateEnum.NG)
                {
                    qualityNoOkEnum = QualityNoOkEnum.OP40厚度超差;
                }
                else
                {
                    qualityState = QualityState.OK;
                    qualityState = QualityStateEnum.OK;
                }
                return qualityState;
            }
@@ -2799,17 +2799,17 @@
        {
            if (qualityState.HasValue == false)
            {
                return (int)QualityState.Suspected;
                return (int)QualityStateEnum.Suspected;
            }
            if (qualityState.Value == 1)
            {
                return (int)QualityState.OK;
                return (int)QualityStateEnum.OK;
            }
            if (qualityState.Value == 2)
            {
                return (int)QualityState.NG;
                return (int)QualityStateEnum.NG;
            }
            return (int)QualityState.Suspected;
            return (int)QualityStateEnum.Suspected;
        }
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_02.cs
@@ -347,12 +347,12 @@
                                        if (logMiddle.OP35OK)
                                        {
                                            logMiddle.QualityStateStr = "OK";
                                            logMiddle.QualityState = (int)QualityState.OK;
                                            logMiddle.QualityState = (int)QualityStateEnum.OK;
                                        }
                                        else
                                        {
                                            logMiddle.QualityStateStr = "NG";
                                            logMiddle.QualityState = (int)QualityState.NG;
                                            logMiddle.QualityState = (int)QualityStateEnum.NG;
                                        }
                                    }
                                    else if (WorkingProcedure.Equals("OP60"))
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP0501.cs
@@ -277,7 +277,7 @@
                                        wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                                        //wplog.QualityState = 1;
                                        wplog.QualityState = (int)QualityState.OK;//默认合格,OP05默认合格
                                        wplog.QualityState = (int)QualityStateEnum.OK;//默认合格,OP05默认合格
                                        wplog.ProcessingDuration = 1;
                                        wplog.MachineToolState = 1;
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/HMI_WorkpieceWrite.cs
@@ -1,4 +1,5 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare.Wms.Core;
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
@@ -136,7 +137,7 @@
                            Object QualityState = null;
                            Object CheckUpdate = null;
                            Object QualityErrorInfo = null;
                            Object WorkingProcedureInt=null;
                            Object WorkingProcedureInt = null;
                            string WorkingProcedureCurrent = "";
                            int UpdateIsOK = 0;
@@ -154,10 +155,10 @@
                                    case "CheckUpdate":
                                        CheckUpdate = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        if((bool)CheckUpdate)
                                        if ((bool)CheckUpdate)
                                        {
                                            var check = plcService.WriteValuePointNew(col.DbNumber, col.Offset, false);
                                        }
                                        }
                                        //plcService.WriteValuePoint(col.DbNumber, col.Offset, 0, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        break;
                                    case "QualityErrorInfo":
@@ -183,7 +184,7 @@
                                StringBuilder builder = new StringBuilder();
                                if (WorkPieceID != null)
                                {
                                    if (WorkPieceID.ToString().Trim().Length==0)
                                    if (WorkPieceID.ToString().Trim().Length == 0)
                                    {
                                        builder.AppendLine("工件二维码值:【" + WorkPieceID.ToString().Trim() + "】长度异常,长度不等于22位!");
                                    }
@@ -196,7 +197,7 @@
                                    {
                                        builder.AppendLine("工件工序:【" + WorkingProcedureInt + "】长度异常,不在约定枚举范围内!");
                                    }
                                    if (QualityState == null)
                                    {
@@ -210,7 +211,7 @@
                                        }
                                        else if ((int)QualityState == 2 || (int)QualityState == 3)
                                        {
                                            if (QualityErrorInfo == null|| string.IsNullOrEmpty(QualityErrorInfo.ToString()))
                                            if (QualityErrorInfo == null || string.IsNullOrEmpty(QualityErrorInfo.ToString()))
                                            {
                                                builder.AppendLine("工件二维码值:【" + WorkPieceID + "】质量不合格原因不能为空");
                                            }
@@ -270,7 +271,7 @@
                                using (DbModel db = new DbModel())
                                {
                                    info = new WorkPieceInfo();
                                    info = db.WorkPieceInfo.Where(o => o.WorkPieceID == WorkPieceID.ToString()&&o.IsDeleted==false).FirstOrDefault();
                                    info = db.WorkPieceInfo.Where(o => o.WorkPieceID == WorkPieceID.ToString() && o.IsDeleted == false).FirstOrDefault();
                                    if (info == null)
                                    {
@@ -304,11 +305,11 @@
                                    info.QualityState = Convert.ToInt32(QualityState);
                                    info.QualityStateUpdateUser = "HMI";
                                    info.QualityStateUpdateTime = DateTime.Now;
                                    info.QualityStateUpdateMode = Environment.MachineName+"自动";
                                    info.QualityStateUpdateMode = Environment.MachineName + "自动";
                                    info.QualityErrorInfo = QualityErrorInfo.ToString();
                                    if(!info.WorkingProcedureCurrent.Equals(WorkingProcedureCurrent))
                                    if (!info.WorkingProcedureCurrent.Equals(WorkingProcedureCurrent))
                                    {
                                        info.Remarks = ( $"HMI修改工序{info.WorkingProcedureCurrent}到{WorkingProcedureCurrent}");
                                        info.Remarks = ($"HMI修改工序{info.WorkingProcedureCurrent}到{WorkingProcedureCurrent}");
                                        info.WorkingProcedureCurrent = WorkingProcedureCurrent;
                                        info.WorkingProcedureCurrent = WorkingProcedureCurrent;
                                    }
@@ -330,11 +331,16 @@
                                    wplog = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceInfo>(info);
                                    wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                    wplog.Remarks = "HMI更新工件质量信息";
                                    wplog.OnlineTime =info.WorkPieceinitOnlineTime;
                                    //1:合格 2:不合格 3:疑似"
                                    QualityStateEnum qualityStateEnum = (QualityStateEnum)Enum.Parse(typeof(QualityStateEnum), QualityState.ToString());
                                    wplog.Remarks = $"HMI更新工件质量信息,修改为[{qualityStateEnum.ToString()}]";
                                    wplog.PieceLogType = (int)PieceLogTypeEnum.HMI修改质量状态;
                                    wplog.PieceLogTypeName = PieceLogTypeEnum.HMI修改质量状态.ToString();
                                    wplog.OnlineTime = info.WorkPieceinitOnlineTime;
                                    db.WorkPieceLog.Add(wplog);
                                    db.WorkPieceInfoLog.Add (WorkPieceInfoManager.GetAddWorkPieceInfoLog(info));
                                    db.WorkPieceInfoLog.Add(WorkPieceInfoManager.GetAddWorkPieceInfoLog(info));
                                    db.SaveChanges();
                                }
@@ -364,7 +370,7 @@
                            }
                        }
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/OP80QualityDataHandler.cs
@@ -332,13 +332,13 @@
                //如果OP80下线,已经更改了质检状态,并且质检状态等于不合格,则这里就不要继续更改质检状态了 【Editby shaocx,2024-08-28】
                bool isNeedUpdateQualityState = true;
                var ooDateTime = Convert.ToDateTime("0001-01-01");
                if (pieceProcess.EndTime != ooDateTime && pieceProcess.QualityState == (int)QualityState.NG)
                if (pieceProcess.EndTime != ooDateTime && pieceProcess.QualityState == (int)QualityStateEnum.NG)
                {
                    isNeedUpdateQualityState = false;
                }
                if (isNeedUpdateQualityState)
                {
                    info.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
                    info.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityStateEnum.OK : QualityStateEnum.NG);
                    logMiddle.QualityState = info.QualityState;
                    //根据质量数据判断是否合格/不合格 【Editby shaocx,2024-06-25】
                    WorkPieceInfoManager.SetLogMiddleForQuality(ref logMiddle);
@@ -363,11 +363,11 @@
                //单独处理 质量数据的状态
                if (isNeedUpdateQualityState)
                {
                    qualityData.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
                    qualityData.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityStateEnum.OK : QualityStateEnum.NG);
                }
                else
                {//必然是不合格
                    qualityData.QualityState = (int)(QualityState.NG);
                    qualityData.QualityState = (int)(QualityStateEnum.NG);
                }
                qualityData.OP80QualityState = qualityData.QualityState.ToString();
@@ -384,7 +384,7 @@
                    pieceProcess.QualityDataInfoID = op80id;
                }
                loginfo2.Remarks = $"质量:{logMiddle.QualityStateStr ?? "空"}";
                if (!info.QualityState.Equals(((int)QualityState.OK).ToString()))
                if (!info.QualityState.Equals(((int)QualityStateEnum.OK).ToString()))
                {
                    info.QualityErrorInfo = $"{logMiddle.WorkingProcedure}工序质量采集数据不合格";
                }
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Enums/PieceLogTypeEnum.cs
@@ -18,5 +18,11 @@
        /// </summary>
        [Description("读码值异常")]
        读码值异常 = 1,
        /// <summary>
        /// HMI修改质量状态
        /// </summary>
        [Description("HMI修改质量状态")]
        HMI修改质量状态 = 2,
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/QualityStateHelper.cs
@@ -33,7 +33,7 @@
        /// <param name="pro"></param>
        public static void SetQualityStateForOP80(WorkPieceLogMiddle logMiddle, ref WorkPieceInfo info, ref WorkPieceProcess pro)
        {
            QualityState setQualityState = QualityState.OK;
            QualityStateEnum setQualityState = QualityStateEnum.OK;
            QualityNoOkEnum? qualityNoOkEnum = null;
            //去掉这个验证,为了让机床计数和数据采集计数相同  【Edityby shaocx,2024-09-04】
@@ -77,7 +77,7 @@
        {
            try
            {
                QualityState setQualityState = QualityState.NG;
                QualityStateEnum setQualityState = QualityStateEnum.NG;
                QualityNoOkEnum? qualityNoOkEnum = null;
                info.QualityState = (int)setQualityState;
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/WorkPieceProcessHelper.cs
@@ -49,7 +49,7 @@
                process.WorkingProcedureCurrent = _procedureCurrent_05;
                process.QualityState = (int)QualityState.OK;
                process.QualityState = (int)QualityStateEnum.OK;
                process.Id = Yitter.IdGenerator.YitIdHelper.NextId();
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/Enums.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -64,19 +65,22 @@
    /// <summary>
    /// 质量状态
    /// </summary>
    public enum QualityState
    public enum QualityStateEnum
    {
        /// <summary>
        /// 合格
        /// </summary>
        [Description("合格")]
        OK = 1,
        /// <summary>
        /// 不合格
        /// </summary>
        [Description("不合格")]
        NG = 2,
        /// <summary>
        /// 疑似
        /// </summary>
        [Description("疑似")]
        Suspected = 3
    }
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Test/UnitTest1.cs
@@ -135,7 +135,7 @@
                WorkingProcedure = "OP30",
                WorkPieceID = "DZ045L2406240103521TAS",
                UpdatedTime = DateTime.Now,
                QualityState = (int)QualityState.NG,
                QualityState = (int)QualityStateEnum.NG,
                QualityNoOk = (int)QualityNoOkEnum.OP30涨断工位力矩超差,
                QualityNoOkReason = QualityNoOkEnum.OP30涨断工位力矩超差.ToString(),
                MonitoringPoint = "",