using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Data.SQLite; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; //using System.Windows.Controls; using FLY.HeatingHelper; using MathNet.Numerics.LinearAlgebra; namespace FLY.HeatingHelper { /// <summary> /// 数据,单例模式 /// </summary> public class ThickHeatData4SQLite_V1 : ThickHeatData { class Temp { public string A { get; set; } public string B { get; set; } public string C { get; set; } } #region 单例模式 private static ThickHeatData4SQLite_V1 _instance = new ThickHeatData4SQLite_V1(); static ThickHeatData4SQLite_V1() { } private ThickHeatData4SQLite_V1() : base() { DBName = null; } public static ThickHeatData4SQLite_V1 Instance { get { return _instance; } } #endregion #region 数据库接口 /// <summary> /// 从数据库中获取数据,清除以前数据 /// </summary> public override void GetDataFromDB(bool reload = false) { Model.Model_HeatData db; string connectionString = ConfigurationManager.ConnectionStrings[DBName].ConnectionString.ToString(); using (db = new Model.Model_HeatData(DBName)) { var result = db.Database.SqlQuery<Temp>("SELECT min(\"结束时间\")as A,MAX(\"结束时间\") as B from HeatData").First(); TotalDataFrom = DateTime.Parse(result.A); TotalDataTo = DateTime.Parse(result.B); LoadDataTo = new DateTime(TotalDataTo.Ticks); LoadDataSpan = new TimeSpan(2, 0, 0, 0); //DataFrom = DBTo - new TimeSpan(2, 0, 0, 0); } string cmdstr; if (reload || _dat_times.Count() <= 0) { cmdstr = string.Format("select * from [HeatData2] where 结束时间>=\"{0}\" and 结束时间<=\"{1}\"", (LoadDataTo - LoadDataSpan).ToString("yyyy-MM-dd HH:mm:ss"), LoadDataTo.ToString("yyyy-MM-dd HH:mm:ss")); } else { cmdstr = string.Format("select * from [HeatData2] where 结束时间>=\"{0}\" and 结束时间<=\"{1}\"", (_dat_times.Last()).ToString("yyyy-MM-dd HH:mm:ss"), LoadDataTo.ToString("yyyy-MM-dd HH:mm:ss")); } SQLiteDataAdapter dbDataAdapter = new SQLiteDataAdapter(cmdstr, connectionString); SQLiteCommandBuilder cb = new SQLiteCommandBuilder(dbDataAdapter); dataTable.Clear(); dbDataAdapter.Fill(dataTable); //FetchData(); //ResetCluster(); } /// <summary> /// 从dataTable中提取数据到内部缓冲区 /// </summary> protected override int FetchData() { _dat_times.Clear(); _thicks.Clear(); _thick_means.Clear(); _thick_2sigmas.Clear(); _heats.Clear(); int cnt = 0; int i = 1; foreach (DataRow dr in dataTable.Rows) { _dat_times.Add(dr.Field<DateTime>("结束时间")); _thick_means.Add(dr.Field<double>("厚度均值")); _thick_2sigmas.Add(dr.Field<double>("SIGMA2")); List<double> th = new List<double>(); i = 1; while (true) { string fieldName = "厚度" + i++; double tmp; try { tmp = dr.Field<double>(fieldName); } catch { break; } th.Add(tmp); } _thicks.Add(th.ToArray()); i = 1; List<double> heat = new List<double>(); while (true) { string fieldName = "加热" + i++; int tmp; try { tmp = dr.Field<int>(fieldName); } catch { break; } heat.Add(tmp); } _heats.Add(heat.ToArray()); _resetBolts.Add(dr.Field<int>("复位区号")); _rotAngles.Add(dr.Field<double>("旋转角度°")); cnt++; } DataChanged++; return cnt; } /// <summary> /// 从dataTable中提取新数据到内部缓冲区 /// </summary> protected override int FetchNewData() { DateTime lasttime = _dat_times.Last(); int cnt = 0; int i = 1; foreach (DataRow dr in dataTable.Rows) { DateTime dtmp = dr.Field<DateTime>("结束时间"); if (lasttime >= dtmp) continue; _dat_times.Add(dtmp); _thick_means.Add(dr.Field<double>("厚度均值")); _thick_2sigmas.Add(dr.Field<double>("SIGMA2")); List<double> th = new List<double>(); i = 1; while (true) { string fieldName = "厚度" + i++; double tmp; try { tmp = dr.Field<double>(fieldName); } catch { break; } th.Add(tmp); } _thicks.Add(th.ToArray()); i = 1; List<double> heat = new List<double>(); while (true) { string fieldName = "加热" + i++; int tmp; try { tmp = dr.Field<int>(fieldName); } catch { break; } heat.Add(tmp); } _heats.Add(heat.ToArray()); cnt++; } DataChanged++; return cnt; } public override int LoadMetaDataFromDB() { throw new NotImplementedException(); } public override int LoadDataFromDB(int reload) { throw new NotImplementedException(); } private DataTable dataTable = new DataTable(); #endregion } }