//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
//{
// ///
// /// OP05 打标完成标记,读取工控机中打印二维码信息
// ///
// 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)
// {
// }
// 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();
// //}
// string lastHandlerWorkPileIDForOP0501 = "";//最后一次处理的工件号
// 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)
// if (lastHandlerWorkPileIDForOP0501 == Convert.ToString(dt.Rows[i]["打标内容"]))
// {//如果excel里的时间要比 当前前10分钟时间要早,那么我就忽略不处理。
// break;
// }
// filteredRows[j] = dt.Rows[i];
// }
// else
// {
// var cacheTime = Convert.ToDateTime(cache);
// //if (currrentTime <= cacheTime)
// if (lastHandlerWorkPileIDForOP0501 == Convert.ToString(dt.Rows[i]["打标内容"]))
// {//如果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;
// }
// //记录下最后一个码
// lastHandlerWorkPileIDForOP0501 = Convert.ToString(dt.Rows[dt.Rows.Count - 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}工序打标完成标记,读取工控机中打印二维码信息,不做校验,请确认配置异常");
// }
// }
// }
//}