schangxiang@126.com
2024-09-05 0850ca67bbc4b7581a595ab985904f7acb8ecb5e
特殊处理 OP05上线? 不再判断 时间,而是判断 最后一个工件
已添加1个文件
已修改3个文件
610 ■■■■ 文件已修改
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs 246 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP0501 - 复制.cs 353 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP0501.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/iWare_SCADA_BusinessLogical.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs
@@ -183,7 +183,7 @@
                                info.Remarks = $"工件二维码第一次出现的工序{loginfo.WorkingProcedure}不是OP05,数据缺失,请确认情况并做相应处理!";
                            }
                            else
                            {
                            {//OP05工序
                                info.QualityState = (int)QualityStateEnum.OK;//此处需要注意,判断所有工序质量,然后再赋值 //默认合格,OP05默认是合格
                                info.Remarks = "OP05新增工件信息";
                            }
@@ -203,20 +203,29 @@
                                return;
                            }
                        }
                        info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();//
                        info.WorkingProcedureEndTime = null;
                        info.WorkPieceState = (int)WorkPieceState.WIP;
                        info.EquipmentID = loginfo.EquipmentID;
                        info.QualityStateUpdateUser = loginfo.UpdatedUserName;
                        info.QualityStateUpdateTime = loginfo.UpdatedTime.Value.LocalDateTime;
                        info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
                        info.UpdatedUserName = loginfo.MonitoringPoint;
                        SystemBussinessHelper.SetWorkPieceInfoMiddleForUpdateDataCapturePointCname(ref info, loginfo.DataCapturePointCname);
                        info.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                        info.WorkPieceCurrentPosition = loginfo.WorkingProcedure;
                        info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2;
                        info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
                        info.Remarks = $"{info.WorkingProcedureCurrent}工件上线";
                        if ((info.WorkingProcedureCurrent.Equals("OP05") && isAddWorkPieceInfo == false))
                        {
                            //如果是OP05的,并且是 ä¸éœ€è¦æ–°å¢ž è¡¨WorkPieceInfo,那么就不需要更新表 WorkPieceInfo
                        }
                        else
                        {
                            info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();//
                            info.WorkingProcedureEndTime = null;
                            info.WorkPieceState = (int)WorkPieceState.WIP;
                            info.EquipmentID = loginfo.EquipmentID;
                            info.QualityStateUpdateUser = loginfo.UpdatedUserName;
                            info.QualityStateUpdateTime = loginfo.UpdatedTime.Value.LocalDateTime;
                            info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
                            info.UpdatedUserName = loginfo.MonitoringPoint;
                            SystemBussinessHelper.SetWorkPieceInfoMiddleForUpdateDataCapturePointCname(ref info, loginfo.DataCapturePointCname);
                            info.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                            info.WorkPieceCurrentPosition = loginfo.WorkingProcedure;
                            info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2;
                            info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
                            info.Remarks = $"{info.WorkingProcedureCurrent}工件上线";
                        }
                        //修复下 op35 åŒä¸€ä¸ªä»¶ ä¸‹çº¿æ—¶é—´è·Ÿä¸‹ä¸€ä¸ªä¸Šçº¿æ—¶é—´ä¸€æ¨¡ä¸€æ ·çš„问题  ã€Editby shaocx,2024-08-27】
                        var isNeedAddNewProcess = true;
@@ -274,116 +283,127 @@
                            new_process.Remarks = "";
                            new_process.MyRemarks = "读码上线时,每次扫描上线都插入追溯表";
                            if (loginfo.WorkingProcedure.Equals("OP05"))
                            {
                            {//特殊处理OP05工序
                                new_process.EndTime = new_process.StartTime;
                                //如果已经存在其他工序,那么就必须要按照其他工序的时间往前推数据 ã€Editby shaocx,2024-09-05】
                                var op05OtherProccss = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID).OrderBy(x => x.StartTime).FirstOrDefault();
                                if (op05OtherProccss != null)
                                {//说明有,那么时间就按照这个时间往前推
                                    var _time = op05OtherProccss.StartTime.AddHours(-1);
                                    new_process.StartTime = _time;
                                    new_process.EndTime = _time;
                                    new_process.CreatedTime = _time;
                                    new_process.UpdatedTime = _time;
                                }
                                db.WorkPieceProcess.Add(new_process);
                            }
                            db.WorkPieceProcess.Add(new_process);
                        }
                        //db.Database.AutoTransactionsEnabled = false;// åŒä¸€ä¸ªSaveChanges默认事务, å…³é—­é»˜è®¤äº‹åŠ¡ï¼š... å¥½åƒä¸èƒ½ç”¨å•Šï¼ŒåŽé¢å†ç ”究吧
                        if (isAddWorkPieceInfo)
                        {
                            db.WorkPieceInfo.Add(info);
                        }
                        else
                        {//不确定info是直接会修改还是需要再次查询,待测试
                         //info.Remarks = "修改,具体修改逻辑待定";
                        }
                        #region åˆ¤æ–­æ˜¯å¦è·³åº,或质量不符合 ç„¶åŽåé¦ˆPLC
                        if (IsFeedback.HasValue && IsFeedback.Value == (int)FeedbackMode.FeedbackPLC)
                        {
                            bool checkQualityInfoCompleteFlag = false;
                            bool plcFlag = true;//反馈给PLC的标记
                            string message = "";
                            checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, loginfo, type);
                            if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityStateEnum.OK)
                            //db.Database.AutoTransactionsEnabled = false;// åŒä¸€ä¸ªSaveChanges默认事务, å…³é—­é»˜è®¤äº‹åŠ¡ï¼š... å¥½åƒä¸èƒ½ç”¨å•Šï¼ŒåŽé¢å†ç ”究吧
                            if (isAddWorkPieceInfo)
                            {
                                plcFlag = false;
                                message = !checkQualityInfoCompleteFlag ? "跳序," : "";
                                message += info.QualityState != (int)QualityStateEnum.OK ? "质量不符合" : "";
                                db.WorkPieceInfo.Add(info);
                            }
                            ////反馈给PLC,(写入点待定)
                            //MessageModel fr = null;
                            //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool"));
                            //if (fr.result)
                            //{
                            //    Log4NetHelper.WriteInfoLog(type, $" å·¥ä»¶{info.WorkPieceID} {loginfo.WorkingProcedure}工序反馈给PLC æˆåŠŸï¼Œ å‡ºçް {message}");
                            //}
                            //else
                            //{
                            //    Log4NetHelper.WriteErrorLog(type, $" å·¥ä»¶{info.WorkPieceID} {loginfo.WorkingProcedure}工序反馈给PLC å¤±è´¥ï¼Œ å‡ºçް {message} ï¼Œå¤±è´¥åŽŸå› ï¼š{fr.resMsg}");
                            //}
                            else
                            {//不确定info是直接会修改还是需要再次查询,待测试
                             //info.Remarks = "修改,具体修改逻辑待定";
                            }
                            //#region åé¦ˆPLC
                            #region åˆ¤æ–­æ˜¯å¦è·³åº,或质量不符合 ç„¶åŽåé¦ˆPLC
                            if (IsFeedback.HasValue && IsFeedback.Value == (int)FeedbackMode.FeedbackPLC)
                            {
                                bool checkQualityInfoCompleteFlag = false;
                                bool plcFlag = true;//反馈给PLC的标记
                                string message = "";
                                checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, loginfo, type);
                            //bool checkQualityInfoCompleteFlag = false;
                            //bool plcFlag = true;//反馈给PLC的标记
                            //string message = "";
                            //checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityStateEnum.OK)
                                {
                                    plcFlag = false;
                                    message = !checkQualityInfoCompleteFlag ? "跳序," : "";
                                    message += info.QualityState != (int)QualityStateEnum.OK ? "质量不符合" : "";
                                }
                                ////反馈给PLC,(写入点待定)
                                //MessageModel fr = null;
                                //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool"));
                                //if (fr.result)
                                //{
                                //    Log4NetHelper.WriteInfoLog(type, $" å·¥ä»¶{info.WorkPieceID} {loginfo.WorkingProcedure}工序反馈给PLC æˆåŠŸï¼Œ å‡ºçް {message}");
                                //}
                                //else
                                //{
                                //    Log4NetHelper.WriteErrorLog(type, $" å·¥ä»¶{info.WorkPieceID} {loginfo.WorkingProcedure}工序反馈给PLC å¤±è´¥ï¼Œ å‡ºçް {message} ï¼Œå¤±è´¥åŽŸå› ï¼š{fr.resMsg}");
                                //}
                            //if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityState.OK)
                            //{
                            //    plcFlag = false;
                            //    message = !checkQualityInfoCompleteFlag ? "跳序," : "";
                            //message += info.QualityState != (int)QualityState.OK ? "质量不符合" : "";
                            //}
                            ////反馈给PLC,(写入点待定)
                            //MessageModel fr = null;
                            //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool"));
                            //if (fr.result)
                            //{
                            //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" å·¥ä»¶{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC æˆåŠŸï¼Œ å‡ºçް {message}");
                            //}
                            //else
                            //{
                            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" å·¥ä»¶{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC å¤±è´¥ï¼Œ å‡ºçް {message} ï¼Œå¤±è´¥åŽŸå› ï¼š{fr.resMsg}");
                            //}
                            //#endregion
                                //#region åé¦ˆPLC
                                //bool checkQualityInfoCompleteFlag = false;
                                //bool plcFlag = true;//反馈给PLC的标记
                                //string message = "";
                                //checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                //if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityState.OK)
                                //{
                                //    plcFlag = false;
                                //    message = !checkQualityInfoCompleteFlag ? "跳序," : "";
                                //message += info.QualityState != (int)QualityState.OK ? "质量不符合" : "";
                                //}
                                ////反馈给PLC,(写入点待定)
                                //MessageModel fr = null;
                                //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool"));
                                //if (fr.result)
                                //{
                                //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" å·¥ä»¶{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC æˆåŠŸï¼Œ å‡ºçް {message}");
                                //}
                                //else
                                //{
                                //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" å·¥ä»¶{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC å¤±è´¥ï¼Œ å‡ºçް {message} ï¼Œå¤±è´¥åŽŸå› ï¼š{fr.resMsg}");
                                //}
                                //#endregion
                            }
                            else
                            {//读码完成若工件质量不符合或发生跳序,不用管设备是否把工件放过去,数采系统都不变更当前工序,反馈设备PLC工件不符合,
                             //若工序后续收集点收到相关工件信息再变更当前工序,  ä½†è´¨é‡ä¿¡æ¯ä¸å˜
                                info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
                            }
                            #endregion
                            #region æ›´æ–°è®¾å¤‡å®žæ—¶è¡¨
                            bool isAddEquipmentCurrentMonitor = false;
                            EquipmentCurrentMonitor equinfo = new EquipmentCurrentMonitor();
                            equinfo = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == loginfo.EquipmentID).FirstOrDefault();
                            if (equinfo == null || equinfo.Id < 1)
                            {//没有工件信息,不做更新
                                Log4NetHelper.WriteErrorLog(type, $"设备{loginfo.EquipmentID} å‘Šè­¦ç›‘控{loginfo.WorkingProcedure} æ²¡æœ‰èŽ·å–åˆ°è®¾å¤‡ç›‘æŽ§ä¿¡æ¯ï¼ŒçŽ°æ–°å¢ž");
                                equinfo = EntityPropHelper.Mapper<EquipmentCurrentMonitor, WorkPieceLog>(loginfo);
                                equinfo.OnlineTime = DateTime.Now;
                                isAddEquipmentCurrentMonitor = true;
                            }
                            else
                            {//更新工件
                                equinfo.WorkPieceID = loginfo.WorkPieceID;
                                equinfo.UpdatedUserName = loginfo.MonitoringPoint;
                                equinfo.UpdatedTime = DateTime.Now;
                                equinfo.OnlineTime = DateTime.Now;
                            }
                            if (isAddEquipmentCurrentMonitor)
                            {
                                equinfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                db.EquipmentCurrentMonitor.Add(equinfo);
                            }
                            #endregion
                            //db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo));
                            db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info));
                            //UpdateKnifeToolLift(db, loginfo);//更新刀具寿命信息
                        }
                        else
                        {//读码完成若工件质量不符合或发生跳序,不用管设备是否把工件放过去,数采系统都不变更当前工序,反馈设备PLC工件不符合,
                         //若工序后续收集点收到相关工件信息再变更当前工序,  ä½†è´¨é‡ä¿¡æ¯ä¸å˜
                            info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
                        }
                        #endregion
                        #region æ›´æ–°è®¾å¤‡å®žæ—¶è¡¨
                        bool isAddEquipmentCurrentMonitor = false;
                        EquipmentCurrentMonitor equinfo = new EquipmentCurrentMonitor();
                        equinfo = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == loginfo.EquipmentID).FirstOrDefault();
                        if (equinfo == null || equinfo.Id < 1)
                        {//没有工件信息,不做更新
                            Log4NetHelper.WriteErrorLog(type, $"设备{loginfo.EquipmentID} å‘Šè­¦ç›‘控{loginfo.WorkingProcedure} æ²¡æœ‰èŽ·å–åˆ°è®¾å¤‡ç›‘æŽ§ä¿¡æ¯ï¼ŒçŽ°æ–°å¢ž");
                            equinfo = EntityPropHelper.Mapper<EquipmentCurrentMonitor, WorkPieceLog>(loginfo);
                            equinfo.OnlineTime = DateTime.Now;
                            isAddEquipmentCurrentMonitor = true;
                        }
                        else
                        {//更新工件
                            equinfo.WorkPieceID = loginfo.WorkPieceID;
                            equinfo.UpdatedUserName = loginfo.MonitoringPoint;
                            equinfo.UpdatedTime = DateTime.Now;
                            equinfo.OnlineTime = DateTime.Now;
                        }
                        if (isAddEquipmentCurrentMonitor)
                        {
                            equinfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                            db.EquipmentCurrentMonitor.Add(equinfo);
                        }
                        #endregion
                        //db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo));
                        db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info));
                        //UpdateKnifeToolLift(db, loginfo);//更新刀具寿命信息
                    }
                    else
                    {
                        loginfo.Remarks = $"上线完成读取二维码{loginfo.WorkPieceID ?? "空"}异常";
                        Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}上线监控读码标记 è¯»å–工件码数据[{loginfo.WorkPieceID ?? "空"}]时异常:");
                            loginfo.Remarks = $"上线完成读取二维码{loginfo.WorkPieceID ?? "空"}异常";
                            Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}上线监控读码标记 è¯»å–工件码数据[{loginfo.WorkPieceID ?? "空"}]时异常:");
                        }
                    }
                }
                catch (Exception e)
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP0501 - ¸´ÖÆ.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,353 @@
//using iWare_SCADA_BusinessLogical.BLL;
//using iWare_SCADA_BusinessLogical.Utils;
//using iWare_SCADA_Model;
//using System;
//using System.Collections.Generic;
//using System.Data;
//using System.Globalization;
//using System.IO;
//using System.Linq;
//using System.Text;
//using System.Threading;
//using System.Threading.Tasks;
//using System.Web.UI.WebControls;
//namespace iWare_SCADA_BusinessLogical
//{
//    /// <summary>
//    /// OP05 æ‰“标完成标记,读取工控机中打印二维码信息
//    /// </summary>
//    public class DataCaptureHandler_OP0501 : DataCaptureHandler
//    {
//        public static readonly DataCaptureHandler_OP0501 Instance = new DataCaptureHandler_OP0501();
//        public DataCaptureHandler_OP0501()
//        {
//        }
//        public override string WorkingProcedure
//        {
//            get { return _dataCaptureConfig.WorkingProcedure; }
//        }
//        public override string DataCapturePointCode
//        {
//            get { return _dataCaptureConfig.DataCapturePointCode; }
//        }
//        public override string DataCapturePointCname
//        {
//            get { return _dataCaptureConfig.DataCapturePointCname; }
//        }
//        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
//        {
//        }
//        public override void DataCaptureStart()
//        {
//            if (IsCaptureflag)
//            {
//                //// plc连接
//                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
//                //if (plcService == null)
//                //{
//                //    SystemValue.lbl_Alert_OP0501 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
//                //    return;
//                //}
//                //if (plcService != null && !plcService.IsConnected)
//                //{
//                //    plcService.Close();
//                //    plcService.OpenService();
//                //}
//                while (true)
//                {
//                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
//                    threadStatusMonitor.Threadcode = DataCapturePointCode;
//                    threadStatusMonitor.Threadcname = DataCapturePointCname;
//                    threadStatusMonitor.Threadendtime = DateTime.Now;
//                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
//                    threadStatusMonitor.Threadstatue = 0;
//                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
//                    try
//                    {
//                        ////_dataCaptureConfig
//                        //if (plcService == null || !plcService.IsConnected)
//                        //{
//                        //    SystemValue.lbl_Alert_OP0501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
//                        //    plcService.Close();
//                        //    plcService.OpenService();
//                        //    Thread.Sleep(100);
//                        //    continue;
//                        //}
//                        //else
//                        {
//                            //var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
//                            //if (SystemValue.value_OP0501.Equals("0") && value.ToString().Equals("1"))
//                            {//当上一标记位0,当前获取标记为1时,
//                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
//                             //业务代码
//                             //读码完成没啥业务操作,获取二维码,然后放到队列中
//                                #region ä»Žå·¥æŽ§æœºèŽ·å–ç›¸å…³äºŒç»´ç 
//                                var path = ConfigHelper.GetConfigString("WorkPeiceIDPath");//打码机打码二维码路径
//                                //扫描共享目录并将新的文件扫描返回  ä¸€èˆ¬èŠ‚æ‹åœ¨15秒左右(可以确认一下)
//                                //扫描修改时间在上次扫描时间之前10秒到当前时间的之间的文件
//                                var dataTime = CommonManager.Instance.CheackPath(Environment.CurrentDirectory + "\\LastModifyTime\\OP05-LastScapTime.txt", 4, -10);
//                                var scapEndTime = DateTimeHelper.GetDateTime();
//                                var newFiles = FileHelper.DetectNewFilesCSV(path, 60, Convert.ToDateTime(dataTime), scapEndTime);
//                                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
//                                    $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息开始:{dataTime}");
//                                foreach (System.IO.FileInfo file in newFiles)
//                                {
//                                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
//                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
//                                        $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,文件名:{file.FullName}");
//                                    DataTable dt = null;
//                                    dt = CSVHelper.ReadCSV(file.FullName);
//                                    if (dt == null)
//                                    {
//                                        continue;
//                                    }
//                                    lock (SystemValue.lock5QRcodeList)
//                                    {
//                                        #region æ¸…过期缓存
//                                        try
//                                        {
//                                            //清过期缓存
//                                            var lstRemoveKey = SystemValue.QRcodeList
//                                                .Where(p => p.Value < DateTimeHelper.GetDateTime().AddMinutes(-600))
//                                                .Select(p => p.Key).ToList();
//                                            if (lstRemoveKey.Count > 0)
//                                            {
//                                                foreach (var key in lstRemoveKey) SystemValue.QRcodeList.Remove(key);
//                                                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"清除缓存数量:({lstRemoveKey.Count}) å‰©ä½™ç¼“存数量:({SystemValue.QRcodeList.Count})");
//                                            }
//                                        }
//                                        catch (Exception ex)
//                                        {
//                                            Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "清除告警报文ID缓存错误!", ex);
//                                        }
//                                        #endregion
//                                        ////筛选需要处理的二维码信息
//                                        //DataRow[] drArr = dt.Select(" æ‰«ç ç»“æžœ='成功'");    //查询
//                                        //DataTable dtNew = dt.Clone();
//                                        //for (int i = 0; i < drArr.Length; i++)
//                                        //{
//                                        //    var now = DateTime.Now;
//                                        //    var list = drArr[i]["时间"].ToString().Split(':');
//                                        //    var d = new DateTime(now.Year, now.Month, now.Day, Convert.ToInt32(list[0]), Convert.ToInt32(list[1]), Convert.ToInt32(list[2]), DateTimeKind.Local);
//                                        //    //and æ—¶é—´> '19:19:34:547'
//                                        //    if (Convert.ToDateTime(DateTime.Now.ToShortDateString() + " " +drArr[i]["时间"]).TimeOfDay> Convert.ToDateTime(DateTime.Now.ToShortDateString() + " 19:19:34:547").TimeOfDay)
//                                        //        dtNew.ImportRow(drArr[i]);
//                                        //    //获取到的工件号异常
//                                        //    SystemValue.lbl_Alert_OP0501 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位";
//                                        //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
//                                        //        $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位");
//                                        //}
//                                        DataTable newDt = new DataTable();
//                                        var dates = file.Name.Split('-', '.');
//                                        var date = string.Format("{0:D4}-{1:D2}-{2:D2}", int.Parse(dates[0]), int.Parse(dates[1]), int.Parse(dates[2]));
//                                        if (DateTimeHelper.GetDateTime().Date != Convert.ToDateTime(date) && DateTimeHelper.GetDateTime().AddDays(-1).Date != Convert.ToDateTime(date))
//                                        {
//                                            continue;
//                                        }
//                                        DataRow[] filteredRows = new DataRow[dt.Rows.Count];
//                                        if (dt.Rows.Count > 0)
//                                        {
//                                            int j = 0;
//                                            var cache = DataCache.GetCache("OP501-LastTime");
//                                            DateTime? lasttime = null;
//                                            if (cache != null)
//                                            {
//                                                lasttime = Convert.ToDateTime(cache);
//                                            }
//                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
//                                                $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,工件最新时间:{(cache == null ? "无缓存" : cache.ToString())}");
//                                            for (int i = dt.Rows.Count - 1; i >= 0; i--)
//                                            {//降序,即优先读取最后一条数据
//                                                string timeValue = " ";
//                                                try
//                                                {
//                                                    timeValue = dt.Rows[i]["时间"].ToString();
//                                                    string[] timeComponents = timeValue.Split(':');
//                                                    string correctedTime = string.Format("{0:D2}:{1:D2}:{2:D2}", int.Parse(timeComponents[0]), int.Parse(timeComponents[1]), int.Parse(timeComponents[2]));
//                                                    var newTime = date + " " + correctedTime;
//                                                    dt.Rows[i]["时间"] = newTime;
//                                                    var currrentTime = Convert.ToDateTime(dt.Rows[i]["时间"]);
//                                                    if (cache == null)
//                                                    {
//                                                        if (j == 0)
//                                                        {
//                                                            if (currrentTime > DateTimeHelper.GetDateTime().AddHours(-10))
//                                                            {
//                                                                lasttime = currrentTime;
//                                                            }
//                                                        }
//                                                        var oldTime = DateTime.Now.AddMinutes(-10);
//                                                        if (currrentTime <= oldTime)
//                                                        {//如果excel里的时间要比 å½“前前10分钟时间要早,那么我就忽略不处理。
//                                                            break;
//                                                        }
//                                                        filteredRows[j] = dt.Rows[i];
//                                                    }
//                                                    else
//                                                    {
//                                                        var cacheTime = Convert.ToDateTime(cache);
//                                                        if (currrentTime <= cacheTime)
//                                                        {//如果excel里的时间要比 æˆ‘缓存中的时间要早,那么我就忽略不处理。
//                                                            break;
//                                                        }
//                                                        filteredRows[j] = dt.Rows[i];
//                                                    }
//                                                    if (currrentTime > DateTimeHelper.GetDateTime().AddHours(-10))
//                                                    {
//                                                        if (lasttime != null && lasttime < currrentTime)
//                                                        {
//                                                            lasttime = currrentTime;
//                                                        }
//                                                    }
//                                                    j++;
//                                                }
//                                                catch (Exception ex)
//                                                {
//                                                    SystemValue.lbl_Alert_OP0501 = $" {_dataCaptureConfig.WorkingProcedure}文件打标时间[{timeValue}]异常,请查看日志!";
//                                                    Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $" {_dataCaptureConfig.WorkingProcedure}文件打标时间,出现异常:", ex);
//                                                }
//                                            }
//                                            filteredRows = filteredRows.Where(item => item != null).ToArray();
//                                            // è®¾ç½®ç¼“存值
//                                            DateTime absoluteExpiration = DateTime.Now.AddDays(30);
//                                            TimeSpan slidingExpiration = TimeSpan.FromMinutes(20);
//                                            if (slidingExpiration == TimeSpan.Zero)
//                                            {
//                                                absoluteExpiration = DateTime.Now.AddDays(30);
//                                            }
//                                            else
//                                            {
//                                                absoluteExpiration = DateTime.MaxValue;
//                                            }
//                                            DataCache.SetCache("OP501-LastTime", lasttime, absoluteExpiration, slidingExpiration);
//                                            if (filteredRows.Count() <= 0)
//                                            {
//                                                continue;
//                                            }
//                                            if (file.LastAccessTime < Convert.ToDateTime(dataTime)) continue;
//                                            using (StreamWriter writer = new StreamWriter(Environment.CurrentDirectory + "\\OP05-LastScapTime.txt", false))
//                                            {
//                                                dataTime = file.LastAccessTime.ToString();
//                                                writer.Write(dataTime);
//                                            }
//                                            Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"读取到{filteredRows.Count()}行数据,时间范围是{filteredRows[j - 1]["时间"]}-{filteredRows[0]["时间"]}");
//                                        }
//                                        //// å·¥ä»¶å·ï¼ˆäºŒç»´ç å€¼ï¼‰
//                                        //string WorkPieceID = dt.Rows[0][""].ToString();
//                                        //if (WorkPieceID.Length != 22)
//                                        //{
//                                        //    //获取到的工件号异常
//                                        //    SystemValue.lbl_Alert_HMI01 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位";
//                                        //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
//                                        //        $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位");
//                                        //}
//                                        //SystemValue.QRcodeList.Add("", DateTimeHelper.GetDateTime());//二维码添加到列表中
//                                        WorkPieceLog wplog = new WorkPieceLog();
//                                        wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
//                                        wplog.WorkingProcedure = _dataCaptureConfig.WorkingProcedure; ;
//                                        //wplog.EquipmentID = WorkingProcedure;
//                                        wplog.Remarks = "cs";
//                                        wplog.MonitoringPoint = DataCapturePointCode;
//                                        //wplog.CreatedUserName = DataCapturePointCode;
//                                        SystemBussinessHelper.SetWorkPieceLogMiddleForCreatedUserName(ref wplog, DataCapturePointCode, DataCapturePointCname);
//                                        wplog.CreatedTime = DateTimeHelper.GetDateTime();
//                                        wplog.UpdatedTime = DateTimeHelper.GetDateTime();
//                                        wplog.UpdatedUserName = Environment.MachineName + "自动" + Thread.CurrentThread.ManagedThreadId.ToString();
//                                        wplog.IsDeleted = false;
//                                        wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
//                                        wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
//                                        //wplog.QualityState = 1;
//                                        wplog.QualityState = (int)QualityStateEnum.OK;//默认合格,OP05默认合格
//                                        wplog.ProcessingDuration = 1;
//                                        wplog.MachineToolState = 1;
//                                        wplog.AlertType = 1;
//                                        wplog.WorkPieceNumber = 1;
//                                        wplog.WorkPieceOnlineTime = Convert.ToDateTime(dataTime);
//                                        wplog.WorkPieceOfflineTime = Convert.ToDateTime(dataTime).AddHours(1);
//                                        wplog.WorkPieceStartMachiningTime = Convert.ToDateTime(dataTime);
//                                        wplog.WorkPieceEndMachiningTime = DateTime.Now.AddDays(7);
//                                        wplog.KnifeEdgeNumber = 10;
//                                        wplog.KnifeToolLife = 10;
//                                        wplog.KnifeToolEarlyWarningLife = 3;
//                                        wplog.KnifeToolSurplusLife = 10;
//                                        foreach (var item in filteredRows)
//                                        {
//                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
//                                                   $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,读取工件二维码:{item["打标内容"].ToString()}");
//                                            if (item == null) break;
//                                            wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
//                                            wplog.WorkPieceID = item["打标内容"].ToString();
//                                            wplog.OfflineTime = Convert.ToDateTime(dataTime);
//                                            wplog.Remarks = item["时间"].ToString() + "|" + item["打标内容"].ToString() + "|" + item["打标内容"].ToString() + "|" + item["扫码等级"].ToString() + "|" + item["扫码结果"].ToString();
//                                            WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), null, _dataCaptureConfig.IsFeedback);
//                                            threadStatusMonitor.Threadstatue = 1;
//                                        }
//                                    }
//                                }
//                                #endregion
//                                //var fileCount = ((iWare_SCADA_BusinessLogical.Utils.FindFiles)newFiles).;
//                                //Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"扫描完成,共扫描到:({fileCount.Count()})个文件");
//                            }
//                            //SystemValue.value_OP0501 = value.ToString();
//                        }
//                    }
//                    catch (Exception ex)
//                    {
//                        threadStatusMonitor.ErrorMsg = $" {_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,出现异常,请查看日志!";
//                        SystemValue.lbl_Alert_OP0501 = $" {_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,出现异常,请查看日志!";
//                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $" {_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,出现异常:", ex);
//                    }
//                    finally
//                    {
//                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
//                    }
//                    //线程多久执行一次(不包含业务处理时间)
//                    if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
//                    {
//                        Thread.Sleep(3000);
//                    }
//                    else
//                    {
//                        Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
//                    }
//                }
//            }
//            else
//            {
//                SystemValue.lbl_Alert_OP0501 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,不做校验,请确认配置信息!";
//                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,不做校验,请确认配置异常");
//            }
//        }
//    }
//}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP0501.cs
@@ -59,6 +59,8 @@
                //    plcService.OpenService();
                //}
                string lastHandlerWorkPileIDForOP0501 = "";//最后一次处理的工件号
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
@@ -189,7 +191,8 @@
                                                            }
                                                        }
                                                        var oldTime = DateTime.Now.AddMinutes(-10);
                                                        if (currrentTime <= oldTime)
                                                        // if (currrentTime <= oldTime)
                                                        if (lastHandlerWorkPileIDForOP0501 == Convert.ToString(dt.Rows[i]["打标内容"]))
                                                        {//如果excel里的时间要比 å½“前前10分钟时间要早,那么我就忽略不处理。
                                                            break;
                                                        }
@@ -198,7 +201,8 @@
                                                    else
                                                    {
                                                        var cacheTime = Convert.ToDateTime(cache);
                                                        if (currrentTime <= cacheTime)
                                                        //if (currrentTime <= cacheTime)
                                                        if (lastHandlerWorkPileIDForOP0501 == Convert.ToString(dt.Rows[i]["打标内容"]))
                                                        {//如果excel里的时间要比 æˆ‘缓存中的时间要早,那么我就忽略不处理。
                                                            break;
                                                        }
@@ -308,6 +312,8 @@
                                        }
                                        //记录下最后一个码
                                        lastHandlerWorkPileIDForOP0501 = Convert.ToString(dt.Rows[dt.Rows.Count - 1]["打标内容"]);
                                    }
                                }
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/iWare_SCADA_BusinessLogical.csproj
@@ -83,6 +83,7 @@
    <Compile Include="BLL\SystemValue.cs" />
    <Compile Include="BLL\WorkPieceInfoManager.cs" />
    <Compile Include="BLL\WorkPieceLogManager.cs" />
    <Compile Include="DataCaptureHandlerV2\DataCaptureHandler_OP0501 - å¤åˆ¶.cs" />
    <Compile Include="DataCaptureHandlerV2\DeleteDataHandler.cs" />
    <Compile Include="DataCaptureHandlerV2\OP80QualityDataHandler.cs" />
    <Compile Include="DataCaptureHandlerV2\DataCaptureHandler_01.cs" />