using FLY.Thick.Blowing.Server.Model; using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace FLY.Thick.Blowing.UI.Fix.Server { public class PicHistory : INotifyPropertyChanged, Misc.ISaveToXml { /// /// 数据能保存的天数 /// public int KeepDay { get; set; } = 180; /// /// Y轴比例 /// public int YRangePercent { get; set; } = 3; /// /// 曲线类型 /// public CHART_TYPE ChartType { get; set; } = CHART_TYPE.Column; /// /// 保存的根路径 /// public string RootPath { get; set; } = @"D:\blowingdata\pic"; /// /// 使能 /// public bool Enable { get; set; } = false; /// /// 自动目标值 /// public bool IsAutoTarget { get; set; } = true; /// /// 当前保存的数据天数 /// public int CurrDays { get; private set; } double Target { get; set; } = double.NaN; double TolerancePercent { get; set; } = double.NaN; string Title { get; set; } /// /// 已经保存了数据的日期, /// private List dateInRootPath = new List(); public PicHistory() { Load(); InitKeepDay(); } string CreateCurrPath(DateTime time, bool isWarning) { //创建路径 DateTime dt = time; string dirpath; if (isWarning) { dirpath = RootPath + @"\iswarning\" + dt.ToString(@"yyyy\\MM\\dd"); } else { dirpath = RootPath + @"\all\" + dt.ToString(@"yyyy\\MM\\dd"); } Directory.CreateDirectory(dirpath); return dirpath + @"\" + dt.ToString("HH_mm_ss"); } public async Task Add(Db_Profile dB_Profile, Lc_ScanData scanData, bool isWarning) { Target = dB_Profile.Target; TolerancePercent = dB_Profile.TolerancePercent; if (double.IsNaN(Target)) return; if (double.IsNaN(TolerancePercent)) return; Title = $"{dB_Profile.PName}-{dB_Profile.OrderNo}-{dB_Profile.Number}"; string title = Title + " "+scanData.Time.ToString(); //ALL string path = CreateCurrPath(scanData.Time, false); bool ret = false; App.Current.MainWindow.Dispatcher.Invoke(() => { WindowSavePic w = new WindowSavePic(); ret = w.Paint(scanData, title, IsAutoTarget, Target, TolerancePercent, path + ".jpg", YRangePercent, ChartType); }); if (!ret) return; await Task.Factory.StartNew(() => { try { if (isWarning) { string path_iswarning = CreateCurrPath(scanData.Time, isWarning); File.Copy(path + ".jpg", path_iswarning + ".jpg", true); } Keep(); } catch { return; } }); } #region 自动删数据 private void InitKeepDay() { dateInRootPath.Clear(); if (!Directory.Exists(RootPath + @"\all")) { Directory.CreateDirectory(RootPath + @"\all"); return; } DirectoryInfo mydir = new DirectoryInfo(RootPath + @"\all"); //年 Regex regex_year = new Regex(@"\d{4}"); Regex regex_month = new Regex(@"\d{2}"); Regex regex_day = new Regex(@"\d{2}"); var fsil_year = from fsi in mydir.GetFileSystemInfos() where (fsi.Attributes == FileAttributes.Directory) && (regex_year.IsMatch(fsi.Name)) select fsi; foreach (var fsi_year in fsil_year) { var fsil_month = from fsi in ((DirectoryInfo)fsi_year).GetFileSystemInfos() where (fsi.Attributes == FileAttributes.Directory) && (regex_month.IsMatch(fsi.Name)) select fsi; foreach (var fsi_month in fsil_month) { var fsil_day = from fsi in ((DirectoryInfo)fsi_month).GetFileSystemInfos() where (fsi.Attributes == FileAttributes.Directory) && (regex_day.IsMatch(fsi.Name)) select fsi; foreach (var fsi_day in fsil_day) { DateTime dt = new DateTime( int.Parse(fsi_year.Name), int.Parse(fsi_month.Name), int.Parse(fsi_day.Name)); //if (DateTime.TryParse(fsi_year.Name.ToString() + "-" + fsi_month.Name.ToString() + "-" + fsi_day.Name.ToString(), out dt)) { dateInRootPath.Add(dt); } } } } dateInRootPath.Sort(new Comparison( delegate (DateTime t1, DateTime t2) { if (t1 > t2) return 1; else if (t1 == t2) return 0; else return -1; })); CurrDays = dateInRootPath.Count; Keep(); } private void Keep() { while (dateInRootPath.Count > KeepDay) { string dirpath = RootPath + @"\all\" + dateInRootPath.First().ToString(@"yyyy\\MM\\dd"); Directory.Delete(dirpath, true); dirpath = RootPath + @"\iswarning\" + dateInRootPath.First().ToString(@"yyyy\\MM\\dd"); Directory.Delete(dirpath, true); dateInRootPath.RemoveAt(0); } CurrDays = dateInRootPath.Count; } #endregion public string[] GetSavePropertyNames() { return new string[]{ "KeepDay", "YRangePercent", "ChartType", "RootPath", "Enable" }; } /// /// 加载历史数据 /// /// public bool Load() { return Misc.SaveToXmlHepler.Load("pichistory.xml", this); } /// /// 保存 /// public void Save() { Misc.SaveToXmlHepler.Save("pichistory.xml", this); } #region INotifyPropertyChanged 成员 public event PropertyChangedEventHandler PropertyChanged; #endregion } }