schangxiang@126.com
2025-01-02 6f035bae8e9ce978c49941518de57585b77e8d7d
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP0501.cs
@@ -1,4 +1,5 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.BLL.Important;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
@@ -59,6 +60,8 @@
                //    plcService.OpenService();
                //}
                string lastHandlerWorkPileIDForOP0501 = "";//最后一次处理的工件号
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
@@ -91,7 +94,7 @@
                                var path = ConfigHelper.GetConfigString("WorkPeiceIDPath");//打码机打码二维码路径
                                //扫描共享目录并将新的文件扫描返回  一般节拍在15秒左右(可以确认一下)
                                //扫描修改时间在上次扫描时间之前10秒到当前时间的之间的文件
                                var dataTime = CommonManager.Instance.CheackPath(Environment.CurrentDirectory + "\\LastModifyTime\\OP05-LastScapTime.txt", 4,-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);
@@ -104,7 +107,7 @@
                                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                        $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,文件名:{file.FullName}");
                                    DataTable dt = null;
                                    DataTable dt = null;
                                    dt = CSVHelper.ReadCSV(file.FullName);
                                    if (dt == null)
                                    {
@@ -166,9 +169,9 @@
                                            }
                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                                $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,工件最新时间:{(cache==null?"无缓存":cache.ToString())}");
                                                $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,工件最新时间:{(cache == null ? "无缓存" : cache.ToString())}");
                                            for (int i = dt.Rows.Count - 1; i >= 0; i--)
                                            {
                                            {//降序,即优先读取最后一条数据
                                                string timeValue = " ";
                                                try
                                                {
@@ -183,14 +186,15 @@
                                                    {
                                                        if (j == 0)
                                                        {
                                                            if(currrentTime>DateTimeHelper.GetDateTime().AddHours(-10))
                                                            if (currrentTime > DateTimeHelper.GetDateTime().AddHours(-10))
                                                            {
                                                                lasttime = currrentTime;
                                                            }
                                                        }
                                                        var oldTime = DateTime.Now.AddMinutes(-10);
                                                        if (currrentTime <= oldTime)
                                                        {
                                                        // if (currrentTime <= oldTime)
                                                        if (lastHandlerWorkPileIDForOP0501 == Convert.ToString(dt.Rows[i]["打标内容"]))
                                                        {//如果excel里的时间要比 当前前10分钟时间要早,那么我就忽略不处理。
                                                            break;
                                                        }
                                                        filteredRows[j] = dt.Rows[i];
@@ -198,8 +202,9 @@
                                                    else
                                                    {
                                                        var cacheTime = Convert.ToDateTime(cache);
                                                        if (currrentTime <= cacheTime)
                                                        {
                                                        //if (currrentTime <= cacheTime)
                                                        if (lastHandlerWorkPileIDForOP0501 == Convert.ToString(dt.Rows[i]["打标内容"]))
                                                        {//如果excel里的时间要比 我缓存中的时间要早,那么我就忽略不处理。
                                                            break;
                                                        }
                                                        filteredRows[j] = dt.Rows[i];
@@ -221,7 +226,7 @@
                                                }
                                            }
                                            filteredRows = filteredRows.Where(item=>item!=null).ToArray();
                                            filteredRows = filteredRows.Where(item => item != null).ToArray();
                                            // 设置缓存值
                                            DateTime absoluteExpiration = DateTime.Now.AddDays(30);
                                            TimeSpan slidingExpiration = TimeSpan.FromMinutes(20);
@@ -244,7 +249,7 @@
                                                dataTime = file.LastAccessTime.ToString();
                                                writer.Write(dataTime);
                                            }
                                            Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"读取到{filteredRows.Count()}行数据,时间范围是{filteredRows[j-1]["时间"]}-{filteredRows[0]["时间"]}");
                                            Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"读取到{filteredRows.Count()}行数据,时间范围是{filteredRows[j - 1]["时间"]}-{filteredRows[0]["时间"]}");
                                        }
                                        //// 工件号(二维码值)
@@ -266,16 +271,19 @@
                                        //wplog.EquipmentID = WorkingProcedure;
                                        wplog.Remarks = "cs";
                                        wplog.MonitoringPoint = DataCapturePointCode;
                                        //wplog.CreatedUserName = DataCapturePointCode;
                                        SystemBussinessHelper.SetWorkPieceLogMiddleForCreatedUserName(ref wplog, DataCapturePointCode, DataCapturePointCname);
                                        wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                        wplog.CreatedUserName = DataCapturePointCode;
                                        wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                        wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                        wplog.UpdatedUserName = Environment.MachineName + "自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                        wplog.IsDeleted = false;
                                        wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                                        wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                                        wplog.QualityState = 1;
                                        //wplog.QualityState = 1;
                                        wplog.QualityState = (int)QualityStateEnum.OK;//默认合格,OP05默认合格
                                        wplog.ProcessingDuration = 1;
                                        wplog.MachineToolState = 1;
                                        wplog.AlertType = 1;
@@ -289,22 +297,44 @@
                                        wplog.KnifeToolEarlyWarningLife = 3;
                                        wplog.KnifeToolSurplusLife = 10;
                                        //快速处理
                                        List<WorkPieceLog> wplogs = new List<WorkPieceLog>();
                                        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);
                                            //转换
                                            WorkPieceLog newLog = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLog>(wplog);
                                            wplogs.Add(newLog);
                                        }
                                        //查询数据,过滤
                                        var queryList = wplogs.Select(x => x.WorkPieceID).ToList();
                                        List<WorkPieceProcess> new_exist_WorkPieceProcess = new List<WorkPieceProcess>();
                                        using (DbModel db = new DbModel())
                                        {
                                            //找到数据库中已有这个工序的数据
                                            new_exist_WorkPieceProcess = db.WorkPieceProcess.Where(o => queryList.Contains(o.WorkPieceID)
                                            && o.WorkingProcedureCurrent == _dataCaptureConfig.WorkingProcedure).ToList();
                                        }
                                        var querynew__exist_WorkPieceProcessList = new_exist_WorkPieceProcess.Select(x => x.WorkPieceID).ToList();
                                        //找到需要新增的数据
                                        wplogs = wplogs.Where(x => !querynew__exist_WorkPieceProcessList.Contains(x.WorkPieceID)).ToList();
                                        foreach (var item in wplogs)
                                        {
                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                                   $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,读取工件二维码:{item.WorkPieceID.ToString()}");
                                            ReadQRcodeManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), null, _dataCaptureConfig.IsFeedback);
                                            threadStatusMonitor.Threadstatue = 1;
                                        }
                                        //记录下最后一个码
                                        lastHandlerWorkPileIDForOP0501 = Convert.ToString(dt.Rows[dt.Rows.Count - 1]["打标内容"]);
                                    }
                                }
@@ -314,7 +344,7 @@
                                //Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"扫描完成,共扫描到:({fileCount.Count()})个文件");
                            }
                            //SystemValue.value_OP0501 = value.ToString();
                        }
                        }
                    }
                    catch (Exception ex)
                    {
@@ -343,7 +373,7 @@
                SystemValue.lbl_Alert_OP0501 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,不做校验,请确认配置信息!";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,不做校验,请确认配置异常");
            }
        }
    }