using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Diagnostics; using System.IO; using System.Linq; using System.Runtime.Remoting.Contexts; using System.Text; using System.Threading; using System.Threading.Tasks; using Txgy.EWS.Client.Common; using Txgy.EWS.Client.IDAL; using Txgy.EWS.Client.Models; using Txgy.Microseismic.BaseLib.Common; using Txgy.Microseismic.BaseLib.Entitys; using Txgy.Microseismic.BaseLib.Helpers; using Txgy.Microseismic.BaseLib.Models; namespace Txgy.EWS.Client.DAL { public class RemoteMySQLDataAccess : IRemoteMySQLDataAccess { IFreeSql fsql = FreeSqlTencent.tencentRemoteMySQL; public string saveWavePath = ""; public MySqlConnection RemoteConn { get; set; } public MySqlCommand Comm { get; set; } public MySqlDataAdapter Adap { get; set; } private int preSelectCount = 0; private static SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1); private string _connectionString = ConfigurationManager.ConnectionStrings["TencetnMySQL"].ConnectionString; int IRemoteMySQLDataAccess.PreSelectCount { get { return preSelectCount; } set { preSelectCount = value; } } private void Dispose() { if (Adap != null) { Adap.Dispose(); Adap = null; } if (Comm != null) { Comm.Dispose(); Comm = null; } if (RemoteConn != null) { RemoteConn.Close(); RemoteConn.Dispose(); RemoteConn = null; } } private bool DBConnection() { string connStr = ConfigurationManager.ConnectionStrings["TencetnMySQL"].ConnectionString; if (RemoteConn == null) RemoteConn = new MySqlConnection(connStr); try { if (RemoteConn.State != ConnectionState.Open) { RemoteConn.Open(); } return true; } catch { return false; } } public List GetEvents(DateTime startTime, DateTime endTime, int pageIndex, int perPageCount, float minML = -1, float maxML = 0) { List pps = new List(); try { string startStr = startTime.Year.ToString() + "-" + startTime.Month.ToString("D2") + "-" + startTime.Day.ToString("D2") + "T" + startTime.Hour.ToString("D2") + ":" + startTime.Minute.ToString("D2") + ":" + startTime.Second.ToString("D2"); string endStr = endTime.Year.ToString() + "-" + endTime.Month.ToString("D2") + "-" + endTime.Day.ToString("D2") + "T" + endTime.Hour.ToString("D2") + ":" + endTime.Minute.ToString("D2") + ":" + endTime.Second.ToString("D2"); pps = fsql.Select() .Where(pp => DateTime.Parse(pp.EventTime) >= startTime && DateTime.Parse(pp.EventTime) <= endTime && pp.ML >= minML && pp.ML <= maxML) .Page(pageNumber: pageIndex, pageSize: perPageCount).ToList(); return pps; //if (DBConnection()) //{ // string courseSql = @"select count(*) from postproeventresult where EventTime>=@stime and EventTime<=@etime // and ML>=@min and ML<=@max"; // Comm = new MySqlCommand(courseSql, RemoteConn); // Comm.Parameters.Add(new MySqlParameter("@stime", MySqlDbType.VarChar) { Value = startStr }); // Comm.Parameters.Add(new MySqlParameter("@etime", MySqlDbType.VarChar) { Value = endStr }); // Comm.Parameters.Add(new MySqlParameter("@min", MySqlDbType.Float) { Value = minML }); // Comm.Parameters.Add(new MySqlParameter("@max", MySqlDbType.Float) { Value = maxML }); // int selectCount = int.Parse(Convert.ToString(Comm.ExecuteScalar())); // int checkIndex = (pageIndex - 1) * perPageCount; // if (checkIndex >= selectCount) // pageIndex = 1; // // 根据分布取数据 // //var v = from q in Context.Set().Skip((pageIndex - 1) * perPageCount).Take(perPageCount).ToList() // // join lc in Context.Set() on q.LicenseColorId equals lc.ColorId // // join ac in Context.Set() on q.AutoColorId equals ac.ColorId // // join am in Context.Set() on q.FeeModeId equals am.FeeModelId // // where q.State == 1 // // select new // // { // // AutoId = q.AutoId, // // AutoLicense = q.AutoLicense, // // LColorId = lc.ColorId, // // LColorName = lc.ColorName, // // AColorId = ac.ColorId, // // AColorName = ac.ColorName, // // FeeModelId = am.FeeModelId, // // FeeModelName = am.FeeModelName, // // Description = q.Description // // }; // //result.State = 1; // //result.Message = ""; // //result.PageInfo = new PageInfo() { PageIndex = pageIndex, RecordCount = count }; // //result.Data = Newtonsoft.Json.JsonConvert.SerializeObject(v.ToList()); //} } catch (Exception ex) { return null; } } public List GetEvents(DateTime startTime, DateTime endTime) { try { if (DBConnection()) { string courseSql = @"select * from " + GlobalConfig.UseResultTable + " where EventTime>=@stime and EventTime<=@etime"; Adap = new MySqlDataAdapter(courseSql, RemoteConn); string startStr = startTime.Year.ToString() + "-" + startTime.Month.ToString("D2") + "-" + startTime.Day.ToString("D2") + "T" + startTime.Hour.ToString("D2") + ":" + startTime.Minute.ToString("D2") + ":" + startTime.Second.ToString("D2"); string endStr = endTime.Year.ToString() + "-" + endTime.Month.ToString("D2") + "-" + endTime.Day.ToString("D2") + "T" + endTime.Hour.ToString("D2") + ":" + endTime.Minute.ToString("D2") + ":" + endTime.Second.ToString("D2"); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@stime", MySqlDbType.VarChar) { Value = startStr }); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@etime", MySqlDbType.VarChar) { Value = endStr }); Adap.SelectCommand.CommandTimeout = 5; DataTable dataTable = new DataTable(); //Adap = null; Adap.Fill(dataTable); List list = new List(); foreach (DataRow dr in dataTable.AsEnumerable()) { MmEventEntity mm = new MmEventEntity(); //mm.WorkAreaID = dr.Field("workarea_id"); mm.EventID = dr.Field(GlobalConfig.EventIDColName); mm.EventTimeStr = dr.Field("EventTime"); mm.EventTime = DateTime.Parse(dr.Field("EventTime")); mm.X = dr.Field("Y"); mm.Y = dr.Field("X"); mm.Z = dr.Field("Z"); mm.ML = dr.Field("ML"); mm.LocSta = dr.Field("LocSta"); mm.MLSta = dr.Field("MLSta"); mm.Energy = GetEnergy(mm.ML); list.Add(mm); } return list; } } catch (Exception ex) { throw ex; } finally { this.Dispose(); } return null; } public List GetEvents(DateTime startTime, DateTime endTime, double minML, double maxML) { try { if (DBConnection()) { string courseSql = @"select * from " + GlobalConfig.UseResultTable + " where EventTime>=@stime and EventTime<=@etime and (ML>=@minML and ML<=@maxML)"; Adap = new MySqlDataAdapter(courseSql, RemoteConn); string startStr = startTime.Year.ToString() + "-" + startTime.Month.ToString("D2") + "-" + startTime.Day.ToString("D2") + "T" + startTime.Hour.ToString("D2") + ":" + startTime.Minute.ToString("D2") + ":" + startTime.Second.ToString("D2"); string endStr = endTime.Year.ToString() + "-" + endTime.Month.ToString("D2") + "-" + endTime.Day.ToString("D2") + "T" + endTime.Hour.ToString("D2") + ":" + endTime.Minute.ToString("D2") + ":" + endTime.Second.ToString("D2"); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@stime", MySqlDbType.VarChar) { Value = startStr }); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@etime", MySqlDbType.VarChar) { Value = endStr }); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@minML", MySqlDbType.Double) { Value = minML }); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@maxML", MySqlDbType.Double) { Value = maxML }); DataTable dataTable = new DataTable(); Adap.Fill(dataTable); List list = new List(); foreach (DataRow dr in dataTable.AsEnumerable()) { MmEventEntity mm = new MmEventEntity(); //mm.WorkAreaID = dr.Field("workarea_id"); mm.EventID = dr.Field(GlobalConfig.EventIDColName); mm.EventTimeStr = dr.Field("EventTime"); mm.EventTime = DateTime.Parse(dr.Field("EventTime")); mm.X = dr.Field("X"); mm.Y = dr.Field("Y"); mm.Z = dr.Field("Z"); mm.ML = dr.Field("ML"); mm.LocSta = dr.Field("LocSta"); mm.MLSta = dr.Field("MLSta"); mm.Energy = GetEnergy(mm.ML); list.Add(mm); } return list; } } catch (Exception ex) { //messagebox.show } finally { this.Dispose(); } return null; } public List GetEvents(string QueryStr, SortTarget ssm, int sm, Models.FilterCondition energyFC) { try { if (DBConnection()) { Adap = new MySqlDataAdapter(QueryStr, RemoteConn); DataTable dataTable = new DataTable(); Adap.Fill(dataTable); List sqllist = new List(); List resultlist = new List(); foreach (DataRow dr in dataTable.AsEnumerable()) { MmEventEntity mm = new MmEventEntity(); //mm.WorkAreaID = dr.Field("workarea_id"); mm.EventID = dr.Field(GlobalConfig.EventIDColName); mm.EventTimeStr = dr.Field("EventTime"); mm.EventTime = DateTime.Parse(dr.Field("EventTime")); mm.X = dr.Field("Y"); mm.Y = dr.Field("X"); mm.Z = dr.Field("Z"); mm.ML = dr.Field("ML"); mm.LocSta = dr.Field("LocSta"); mm.MLSta = dr.Field("MLSta"); mm.Energy = GetEnergy(mm.ML); sqllist.Add(mm); } if (energyFC.IsUse) { resultlist = sqllist.Where(sl => sl.Energy >= energyFC.Cond2 && sl.Energy <= energyFC.Cond1).ToList(); } else { resultlist = sqllist; } switch (ssm) { case SortTarget.Time: resultlist.Sort((x, y) => { return sm * x.EventTime.CompareTo(y.EventTime); }); break; case SortTarget.ML: resultlist.Sort((x, y) => { return sm * x.ML.CompareTo(y.ML); }); break; case SortTarget.Energy: resultlist.Sort((x, y) => { return sm * x.Energy.CompareTo(y.Energy); }); break; case SortTarget.Depth: resultlist.Sort((x, y) => { return sm * x.Z.CompareTo(y.Z); }); break; default: break; } return resultlist; } } catch (Exception ex) { //throw ex; } finally { this.Dispose(); } return null; } /// /// 返回指定数量的最新事件,按发震时刻排序 /// /// 数量 /// public List GetTopEvents(int MaxCnt, int PreCnt) { try { if (DBConnection()) { string CountSql = @"select count('" + GlobalConfig.EventIDColName + "') from " + GlobalConfig.UseResultTable; Comm = new MySqlCommand(CountSql, RemoteConn); int count = int.Parse(Convert.ToString(Comm.ExecuteScalar())); if (count > preSelectCount) { preSelectCount = count; } //Console.WriteLine(count); if (count > PreCnt) { int selCnt = count - PreCnt; if (selCnt > MaxCnt) selCnt = MaxCnt; string courseSql = @"select * from " + GlobalConfig.UseResultTable + " order by " + GlobalConfig.EventIDColName + " desc limit @tcnt"; Adap = new MySqlDataAdapter(courseSql, RemoteConn); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@tcnt", MySqlDbType.Int32) { Value = selCnt }); DataTable dataTable = new DataTable(); Adap.Fill(dataTable); List list = new List(); foreach (DataRow dr in dataTable.AsEnumerable()) { MmEventEntity mm = new MmEventEntity(); //mm.WorkAreaID = dr.Field("workarea_id"); mm.EventID = dr.Field(GlobalConfig.EventIDColName); mm.EventTimeStr = dr.Field("EventTime"); mm.EventTime = DateTime.Parse(dr.Field("EventTime")); mm.X = dr.Field("Y"); mm.Y = dr.Field("X"); mm.Z = dr.Field("Z"); mm.ML = Math.Round(dr.Field("ML"), 2); mm.LocSta = dr.Field("LocSta"); mm.MLSta = dr.Field("MLSta"); mm.Energy = GetEnergy(mm.ML); list.Add(mm); } return list; } else { return null; } } } catch (Exception ex) { throw ex; } finally { this.Dispose(); } return null; } public bool DownLoadWavedata(string eventTime, string savePath, string saveName, string tableName) { //bool res = false; try { if (DBConnection()) { string courseSql = @"select WaveData from " + tableName + " where EventTime=@eventTime"; MySqlCommand cmd = new MySqlCommand(courseSql, RemoteConn); cmd.Parameters.AddWithValue("@eventTime", eventTime); MySqlDataReader dr = cmd.ExecuteReader(); List wds = new List(); while (dr.Read()) //开始读数据 { byte[] blob; blob = (byte[])dr["wavedata"]; if (blob.Length == 0) break; wds.AddRange(blob); //Array.ConstrainedCopy(blob, 0, wd, 0, blob.Length); //Console.WriteLine(blob.Length + ">>>>>>>>>>>"); //对数据进行处理 } string mseedPath = savePath + saveName + ".mseed"; SaveBinaryFile(mseedPath, wds.ToArray()); dr.Close(); dr.Dispose(); courseSql = @"select JsonFile from " + tableName + " where EventTime=@eventTime"; cmd = new MySqlCommand(courseSql, RemoteConn); cmd.Parameters.AddWithValue("@eventTime", eventTime); MySqlDataReader drjson = cmd.ExecuteReader(); List jsonList = new List(); while (drjson.Read()) //开始读数据 { byte[] blob; blob = (byte[])drjson["JsonFile"]; if (blob.Length == 0) break; jsonList.AddRange(blob); } string jsonPath = savePath + saveName + ".json"; SaveBinaryFile(jsonPath, jsonList.ToArray()); drjson.Close(); drjson.Dispose(); cmd.Dispose(); return true; } } catch (Exception ex) { throw ex; } finally { this.Dispose(); } return false; } public void SaveBinaryFile(string fn, byte[] datas) { FileStream fs = new FileStream(fn, FileMode.OpenOrCreate); BinaryWriter binWriter = new BinaryWriter(fs); binWriter.Write(datas); binWriter.Close(); fs.Close(); } public MmEventEntity GetEvent(int eventID) { try { if (DBConnection()) { MmEventEntity mm; string courseSql = @"select * from " + GlobalConfig.UseResultTable + " where " + GlobalConfig.EventIDColName + "==@eid"; Adap = new MySqlDataAdapter(courseSql, RemoteConn); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@eid", MySqlDbType.VarChar) { Value = eventID }); DataTable dataTable = new DataTable(); Adap.Fill(dataTable); if (dataTable.Rows.Count > 0) { DataRow dr = dataTable.Rows[0]; mm = new MmEventEntity(); //mm.WorkAreaID = dr.Field("workarea_id"); mm.EventID = dr.Field(GlobalConfig.EventIDColName); mm.EventTimeStr = dr.Field("EventTime"); mm.EventTime = DateTime.Parse(dr.Field("EventTime")); mm.X = dr.Field("Y"); mm.Y = dr.Field("X"); mm.Z = dr.Field("Z"); mm.ML = dr.Field("ML"); mm.LocSta = dr.Field("LocSta"); mm.MLSta = dr.Field("MLSta"); mm.Energy = GetEnergy(mm.ML); return mm; } else { return null; } } } catch (Exception ex) { //messagebox.show } finally { this.Dispose(); } return null; } public MmEventEntity GetEvent(string eventTime) { try { if (DBConnection()) { MmEventEntity mm; string courseSql = @"select * from " + GlobalConfig.UseResultTable + " where EventTime=@etime"; Adap = new MySqlDataAdapter(courseSql, RemoteConn); //string startStr = startTime.Year.ToString() + "-" + startTime.Month.ToString("D2") + "-" + startTime.Day.ToString("D2") + "T" + // startTime.Hour.ToString("D2") + ":" + startTime.Minute.ToString("D2") + ":" + startTime.Second.ToString("D2"); //string endStr = endTime.Year.ToString() + "-" + endTime.Month.ToString("D2") + "-" + endTime.Day.ToString("D2") + "T" + // endTime.Hour.ToString("D2") + ":" + endTime.Minute.ToString("D2") + ":" + endTime.Second.ToString("D2"); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@etime", MySqlDbType.VarChar) { Value = eventTime }); DataTable dataTable = new DataTable(); Adap.Fill(dataTable); if (dataTable.Rows.Count > 0) { DataRow dr = dataTable.Rows[0]; mm = new MmEventEntity(); //mm.WorkAreaID = dr.Field("workarea_id"); mm.EventID = dr.Field(GlobalConfig.EventIDColName); mm.EventTimeStr = dr.Field("EventTime"); mm.EventTime = DateTime.Parse(dr.Field("EventTime")); mm.X = dr.Field("Y"); mm.Y = dr.Field("X"); mm.Z = dr.Field("Z"); mm.ML = dr.Field("ML"); mm.LocSta = dr.Field("LocSta"); mm.MLSta = dr.Field("MLSta"); mm.Energy = GetEnergy(mm.ML); return mm; } else { return null; } } } catch (Exception ex) { throw ex; } finally { this.Dispose(); } return null; } public MmEventEntity GetLastEvent() { try { if (DBConnection()) { MmEventEntity mm; //string courseSql = @"select * from " + GlobalConfig.UseResultTable + " " + // "where "+GlobalConfig.EventIDColName+"=(select max("+ GlobalConfig.EventIDColName + ") from "+ GlobalConfig.UseResultTable+")"; string courseSql = @"select * from " + GlobalConfig.UseResultTable + " " + "order by " + GlobalConfig.EventIDColName + " desc limit 1"; Adap = new MySqlDataAdapter(courseSql, RemoteConn); DataTable dataTable = new DataTable(); Adap.Fill(dataTable); if (dataTable.Rows.Count > 0) { DataRow dr = dataTable.Rows[0]; mm = new MmEventEntity(); mm.WorkAreaID = dr.Field("WorkAreaID"); mm.EventID = dr.Field(GlobalConfig.EventIDColName); mm.EventTimeStr = dr.Field("EventTime"); mm.EventTime = DateTime.Parse(dr.Field("EventTime")); mm.OriginTime = dr.Field("OriginTime"); mm.X = dr.Field("Y"); mm.Y = dr.Field("X"); mm.Z = dr.Field("Z"); mm.ML = dr.Field("ML"); mm.LocSta = dr.Field("LocSta"); mm.MLSta = dr.Field("MLSta"); mm.RMS = dr.Field("RMS"); mm.Energy = GetEnergy(mm.ML); return mm; } else { return null; } } } catch (Exception ex) { throw ex; } finally { this.Dispose(); } return null; } public MmEventEntity GetLastEvent(DateTime deadline) { try { if (DBConnection()) { MmEventEntity mm; string deadlineStr = deadline.Year.ToString() + "-" + deadline.Month.ToString("D2") + "-" + deadline.Day.ToString("D2") + "T" + deadline.Hour.ToString("D2") + ":" + deadline.Minute.ToString("D2") + ":" + deadline.Second.ToString("D2"); string courseSql = @"select * from " + GlobalConfig.UseResultTable + " where EventTime<=@etime " + "order by " + GlobalConfig.EventIDColName + " desc limit 1"; Adap = new MySqlDataAdapter(courseSql, RemoteConn); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@etime", MySqlDbType.VarChar) { Value = deadlineStr }); DataTable dataTable = new DataTable(); Adap.Fill(dataTable); if (dataTable.Rows.Count > 0) { DataRow dr = dataTable.Rows[0]; mm = new MmEventEntity(); mm.WorkAreaID = dr.Field("WorkAreaID"); mm.EventID = dr.Field(GlobalConfig.EventIDColName); mm.EventTimeStr = dr.Field("EventTime"); mm.EventTime = DateTime.Parse(dr.Field("EventTime")); mm.OriginTime = dr.Field("OriginTime"); mm.X = dr.Field("Y"); mm.Y = dr.Field("X"); mm.Z = dr.Field("Z"); mm.ML = dr.Field("ML"); mm.LocSta = dr.Field("LocSta"); mm.MLSta = dr.Field("MLSta"); mm.RMS = dr.Field("RMS"); mm.Energy = GetEnergy(mm.ML); return mm; } else { return null; } } } catch (Exception ex) { throw ex; } finally { this.Dispose(); } return null; } public List GetLastNewEvents(int resultCount) { try { if (DBConnection()) { //string CountSql = @"select count('" + GlobalConfig.EventIDColName + "') from " + GlobalConfig.UseResultTable; //Comm = new MySqlCommand(CountSql, RemoteConn); //int count = int.Parse(Convert.ToString(Comm.ExecuteScalar())); //if (count > preSelectCount) //{ // preSelectCount = count; //} ////Console.WriteLine(count); // int selCnt = count - PreCnt; // if (selCnt > MaxCnt) // selCnt = MaxCnt; string courseSql = @"select * from " + GlobalConfig.UseResultTable + " order by " + GlobalConfig.EventIDColName + " desc limit @tcnt"; Adap = new MySqlDataAdapter(courseSql, RemoteConn); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@tcnt", MySqlDbType.Int32) { Value = resultCount }); DataTable dataTable = new DataTable(); Adap.Fill(dataTable); List list = new List(); foreach (DataRow dr in dataTable.AsEnumerable()) { MmEventEntity mm = new MmEventEntity(); //mm.WorkAreaID = dr.Field("workarea_id"); mm.EventID = dr.Field(GlobalConfig.EventIDColName); mm.EventTimeStr = dr.Field("EventTime"); mm.EventTime = DateTime.Parse(dr.Field("EventTime")); mm.X = dr.Field("Y"); mm.Y = dr.Field("X"); mm.Z = dr.Field("Z"); mm.ML = Math.Round(dr.Field("ML"), 2); mm.LocSta = dr.Field("LocSta"); mm.MLSta = dr.Field("MLSta"); mm.Energy = GetEnergy(mm.ML); list.Add(mm); } return list; } } catch (Exception ex) { throw ex; } finally { this.Dispose(); } return null; } /// /// 异步统计指定时间范围的事件数量 /// /// /// /// public async Task StatEventCountAsync(DateTime startTime, DateTime endTime) { try { using (MySqlConnection connection = new MySqlConnection(_connectionString)) { await _semaphore.WaitAsync(); await connection.OpenAsync(); string startStr = startTime.Year.ToString() + "-" + startTime.Month.ToString("D2") + "-" + startTime.Day.ToString("D2") + "T" + startTime.Hour.ToString("D2") + ":" + startTime.Minute.ToString("D2") + ":" + startTime.Second.ToString("D2"); string endStr = endTime.Year.ToString() + "-" + endTime.Month.ToString("D2") + "-" + endTime.Day.ToString("D2") + "T" + endTime.Hour.ToString("D2") + ":" + endTime.Minute.ToString("D2") + ":" + endTime.Second.ToString("D2"); string sqlStr = "SELECT COUNT(*) FROM realtimeeventresult WHERE EventTime>=@stime and EventTime<=@etime"; using (MySqlCommand command = new MySqlCommand(sqlStr, connection)) { command.Parameters.AddWithValue("@stime", startStr); command.Parameters.AddWithValue("@etime", endStr); using (MySqlDataReader reader = (MySqlDataReader)await command.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { _semaphore.Release(); //Console.WriteLine(reader.GetFieldType(0)); // 处理查询结果 int cnt = (int)await reader.GetFieldValueAsync(0); return cnt; } } } _semaphore.Release(); } } catch (Exception ex) { // 异常处理代码 Console.WriteLine($"DownloadDataAsync error: {ex.StackTrace}"); throw ex; } // 如果没有查询到数据,则返回空引用 return 0; } /// /// 下载波形和Json数据 /// /// /// /// /// public async ValueTask DownloadWaveDataAsync(GridItemEventResult gier, string savePath, Action callback) { try { using (MySqlConnection connection = new MySqlConnection(_connectionString)) { await _semaphore.WaitAsync(); await connection.OpenAsync(); string eventTimeStr = gier.EventTime; using (MySqlCommand command = new MySqlCommand("SELECT WaveData,JsonFile FROM realtimewavedatas WHERE EventTime=@et", connection)) { command.Parameters.AddWithValue("@et", eventTimeStr); using (MySqlDataReader reader = (MySqlDataReader)await command.ExecuteReaderAsync()) { if (await reader.ReadAsync()) { string datePath = eventTimeStr.Substring(0, 4) + eventTimeStr.Substring(5, 2) + eventTimeStr.Substring(8, 2); datePath = savePath + datePath; if (!Directory.Exists(datePath)) { Directory.CreateDirectory(datePath); } //未包含后缀名 string filePath = datePath + "\\HA." + eventTimeStr.Substring(0, 4) + eventTimeStr.Substring(5, 2) + eventTimeStr.Substring(8, 2) + eventTimeStr.Substring(10, 3) + eventTimeStr.Substring(14, 2) + eventTimeStr.Substring(17, 2) + ".01A"; //Console.WriteLine("文件路径构建完成!"); if (!File.Exists(filePath + ".mseed")) { //保存MSeed文件 byte[] mseedData = await reader.GetFieldValueAsync(0); using (FileStream fileStream = new FileStream(filePath + ".mseed", FileMode.Create, FileAccess.Write)) { await fileStream.WriteAsync(mseedData, 0, mseedData.Length); } //Console.WriteLine("MSeed下载完成!"); } if (!File.Exists(filePath + ".json")) { //保存Json文件 byte[] jsonData = await reader.GetFieldValueAsync(1); using (FileStream fileStream = new FileStream(filePath + ".json", FileMode.Create, FileAccess.Write)) { await fileStream.WriteAsync(jsonData, 0, jsonData.Length); } //Console.WriteLine("Json下载完成!"); } // 下载完成后调用回调函数 callback?.Invoke(gier); } } } } // if(_semaphore.AvailableWaitHandle) } catch (Exception ex) { // 异常处理代码 Console.WriteLine($"DownloadDataAsync error: {ex.StackTrace}"); throw ex; } finally { _semaphore.Release(); } } public async ValueTask DownloadJsonDataAsync(GridItemEventResult gier, string savePath, Action callback) { try { using (MySqlConnection connection = new MySqlConnection(_connectionString)) { await _semaphore.WaitAsync(); await connection.OpenAsync(); string eventTimeStr = gier.EventTime; using (MySqlCommand command = new MySqlCommand("SELECT JsonFile FROM realtimewavedatas WHERE EventTime=@et", connection)) { command.Parameters.AddWithValue("@et", eventTimeStr); using (MySqlDataReader reader = (MySqlDataReader)await command.ExecuteReaderAsync()) { if (await reader.ReadAsync()) { string datePath = eventTimeStr.Substring(0, 4) + eventTimeStr.Substring(5, 2) + eventTimeStr.Substring(8, 2); datePath = savePath + datePath; if (!Directory.Exists(datePath)) { Directory.CreateDirectory(datePath); } //未包含后缀名 string filePath = datePath + "\\HA." + eventTimeStr.Substring(0, 4) + eventTimeStr.Substring(5, 2) + eventTimeStr.Substring(8, 2) + eventTimeStr.Substring(10, 3) + eventTimeStr.Substring(14, 2) + eventTimeStr.Substring(17, 2) + ".01A"; //Console.WriteLine("文件路径构建完成!"); //if (!File.Exists(filePath + ".mseed")) //{ // //保存MSeed文件 // byte[] mseedData = await reader.GetFieldValueAsync(0); // using (FileStream fileStream = new FileStream(filePath + ".mseed", FileMode.Create, FileAccess.Write)) // { // await fileStream.WriteAsync(mseedData, 0, mseedData.Length); // } // //Console.WriteLine("MSeed下载完成!"); //} if (!File.Exists(filePath + ".json")) { //保存Json文件 byte[] jsonData = await reader.GetFieldValueAsync(0); using (FileStream fileStream = new FileStream(filePath + ".json", FileMode.Create, FileAccess.Write)) { await fileStream.WriteAsync(jsonData, 0, jsonData.Length); } //Console.WriteLine("Json下载完成!"); } // 下载完成后调用回调函数 callback?.Invoke(gier); } } } } // if(_semaphore.AvailableWaitHandle) } catch (Exception ex) { // 异常处理代码 Console.WriteLine($"DownloadDataAsync error: {ex.StackTrace}"); throw ex; } finally { _semaphore.Release(); } } /// /// 查询和下载数据 /// /// /// /// /// public async Task QueryAndDownloadDataAsync(int eventID, string savePath, Action callback) { try { using (MySqlConnection connection = new MySqlConnection(_connectionString)) { await _semaphore.WaitAsync(); await connection.OpenAsync(); string sqlStr = "SELECT * FROM realtimeeventresult order by RTEventID desc limit 1"; using (MySqlCommand command = new MySqlCommand(sqlStr, connection)) { //command.Parameters.AddWithValue("@eid", eventID); command.CommandTimeout = 2; using (MySqlDataReader reader = (MySqlDataReader)await command.ExecuteReaderAsync()) { //如果查询结果集中存在数据,则调用异步下载方法进行数据下载 if (await reader.ReadAsync()) { int qid = await reader.GetFieldValueAsync(0); //如果查询的事件id大于之前事件的id if (qid > eventID) { GridItemEventResult gier = new GridItemEventResult(); gier.EventID = qid; gier.WorkAreaID = await reader.GetFieldValueAsync(1); gier.EventTime = await reader.GetFieldValueAsync(2); gier.OTime=DateTime.Parse(gier.EventTime); gier.OriginTime = await reader.GetFieldValueAsync(3); gier.Y = await reader.GetFieldValueAsync(4); gier.X = await reader.GetFieldValueAsync(5); gier.Z = await reader.GetFieldValueAsync(6); gier.ML = await reader.GetFieldValueAsync(7); gier.LocSta = await reader.GetFieldValueAsync(8); gier.MLSta = await reader.GetFieldValueAsync(9); gier.RMS = await reader.GetFieldValueAsync(10); gier.SetEnergy(); _semaphore.Release(); await DownloadJsonDataAsync(gier, savePath, callback).AsTask(); return; //return gier; } } } } } _semaphore.Release(); //return null; } catch (Exception ex) { _semaphore.Release(); // 异常处理代码 Console.WriteLine($"QueryAndDownloadDataAsync error: {ex.StackTrace}"); throw ex; } } public async Task QueryAndDownloadDataAsync(int eventID, DateTime endTime, string savePath, Action callback) { try { using (MySqlConnection connection = new MySqlConnection(_connectionString)) { await _semaphore.WaitAsync(); await connection.OpenAsync(); string sqlStr = "SELECT * FROM realtimeeventresult WHERE EventTime<=@etime order by RTEventID desc limit 1"; string endStr = endTime.Year.ToString() + "-" + endTime.Month.ToString("D2") + "-" + endTime.Day.ToString("D2") + "T" + endTime.Hour.ToString("D2") + ":" + endTime.Minute.ToString("D2") + ":" + endTime.Second.ToString("D2"); //string sqlStr = "SELECT * FROM realtimeeventresult order by RTEventID desc limit 1"; using (MySqlCommand command = new MySqlCommand(sqlStr, connection)) { //command.Parameters.AddWithValue("@eid", eventID); command.Parameters.AddWithValue("@etime", endStr); command.CommandTimeout = 2; using (MySqlDataReader reader = (MySqlDataReader)await command.ExecuteReaderAsync()) { //如果查询结果集中存在数据,则调用异步下载方法进行数据下载 if (await reader.ReadAsync()) { int qid = await reader.GetFieldValueAsync(0); //string etime = await reader.GetFieldValueAsync(1); //如果查询的事件id大于之前事件的id if (qid > eventID) { GridItemEventResult gier = new GridItemEventResult(); gier.EventID = qid; gier.WorkAreaID = await reader.GetFieldValueAsync(1); gier.EventTime = await reader.GetFieldValueAsync(2); gier.OTime = DateTime.Parse(gier.EventTime); gier.OriginTime = await reader.GetFieldValueAsync(3); gier.Y = await reader.GetFieldValueAsync(4); gier.X = await reader.GetFieldValueAsync(5); gier.Z = await reader.GetFieldValueAsync(6); gier.ML = await reader.GetFieldValueAsync(7); gier.LocSta = await reader.GetFieldValueAsync(8); gier.MLSta = await reader.GetFieldValueAsync(9); gier.RMS = await reader.GetFieldValueAsync(10); gier.SetEnergy(); _semaphore.Release(); Console.WriteLine("gier构建完成!"); await DownloadWaveDataAsync(gier, savePath, callback).AsTask(); return; //return gier; } } } } } _semaphore.Release(); //return null; } catch (Exception ex) { _semaphore.Release(); // 异常处理代码 Console.WriteLine($"QueryAndDownloadDataAsync error: {ex.StackTrace}"); throw ex; } } public async Task QueryEventByIDAsync(int eventID, string savePath, Action callback) { try { using (MySqlConnection connection = new MySqlConnection(_connectionString)) { await _semaphore.WaitAsync(); await connection.OpenAsync(); string sqlStr = "SELECT * FROM realtimeeventresult WHERE RTEventID=@eid order by RTEventID desc limit 1"; //string endStr = endTime.Year.ToString() + "-" + endTime.Month.ToString("D2") + "-" + endTime.Day.ToString("D2") + "T" + // endTime.Hour.ToString("D2") + ":" + endTime.Minute.ToString("D2") + ":" + endTime.Second.ToString("D2"); //string sqlStr = "SELECT * FROM realtimeeventresult order by RTEventID desc limit 1"; using (MySqlCommand command = new MySqlCommand(sqlStr, connection)) { command.Parameters.AddWithValue("@eid", eventID); //command.Parameters.AddWithValue("@etime", endStr); //command.CommandTimeout = 2; using (MySqlDataReader reader = (MySqlDataReader)await command.ExecuteReaderAsync()) { //如果查询结果集中存在数据,则调用异步下载方法进行数据下载 if (await reader.ReadAsync()) { int qid = await reader.GetFieldValueAsync(0); //string etime = await reader.GetFieldValueAsync(1); //如果查询的事件id大于之前事件的id //if (qid > eventID) { GridItemEventResult gier = new GridItemEventResult(); gier.EventID = qid; gier.WorkAreaID = await reader.GetFieldValueAsync(1); gier.EventTime = await reader.GetFieldValueAsync(2); gier.OTime = DateTime.Parse(gier.EventTime); gier.OriginTime = await reader.GetFieldValueAsync(3); gier.Y = await reader.GetFieldValueAsync(4); gier.X = await reader.GetFieldValueAsync(5); gier.Z = await reader.GetFieldValueAsync(6); gier.ML = await reader.GetFieldValueAsync(7); gier.LocSta = await reader.GetFieldValueAsync(8); gier.MLSta = await reader.GetFieldValueAsync(9); gier.RMS = await reader.GetFieldValueAsync(10); gier.SetEnergy(); _semaphore.Release(); Console.WriteLine("gier构建完成!"); await DownloadWaveDataAsync(gier, savePath, callback).AsTask(); return; //return gier; } } } } } _semaphore.Release(); //return null; } catch (Exception ex) { _semaphore.Release(); // 异常处理代码 Console.WriteLine($"QueryAndDownloadDataAsync error: {ex.StackTrace}"); throw ex; } } public List GetLastEvents(int lastEventID) { List giers= new List(); using (MySqlConnection connection = new MySqlConnection(_connectionString)) { string sqlStr = "SELECT * FROM realtimeeventresult where RTEventID>@eid order by RTEventID desc"; connection.Open(); using (MySqlCommand command = new MySqlCommand(sqlStr, connection)) { command.Parameters.AddWithValue("@eid", lastEventID); using (MySqlDataReader reader = (MySqlDataReader)command.ExecuteReader()) { //int qid = reader.GetFieldValue(0); //reader.Read(); //GridItemEventResult gier = new GridItemEventResult(); //gier.EventID = reader.GetFieldValue(0); //gier.WorkAreaID = reader.GetFieldValue(1); //gier.EventTime = reader.GetFieldValue(2); //gier.OriginTime = reader.GetFieldValue(3); //gier.Y = reader.GetFieldValue(4); //gier.X = reader.GetFieldValue(5); //gier.Z = reader.GetFieldValue(6); //gier.ML = reader.GetFieldValue(7); //gier.LocSta = reader.GetFieldValue(8); //gier.MLSta = reader.GetFieldValue(9); //gier.RMS = reader.GetFieldValue(10); //gier.SetEnergy(); //giers.Add(gier); while (reader.Read()) { GridItemEventResult gier = new GridItemEventResult(); gier.EventID = reader.GetFieldValue(0); gier.WorkAreaID = reader.GetFieldValue(1); gier.EventTime = reader.GetFieldValue(2); gier.OTime = DateTime.Parse(gier.EventTime); gier.OriginTime = reader.GetFieldValue(3); gier.Y = reader.GetFieldValue(4); gier.X = reader.GetFieldValue(5); gier.Z = reader.GetFieldValue(6); gier.ML = reader.GetFieldValue(7); gier.LocSta = reader.GetFieldValue(8); gier.MLSta = reader.GetFieldValue(9); gier.RMS = reader.GetFieldValue(10); gier.SetEnergy(); giers.Add(gier); } } } } return giers; } public List GetLastTopEvents(int QueryCount) { try { if (DBConnection()) { string courseSql = @"select * from " + GlobalConfig.UseResultTable + " order by RTEventID desc limit @qc"; Adap = new MySqlDataAdapter(courseSql, RemoteConn); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@qc", MySqlDbType.Int32) { Value = QueryCount }); //Adap.SelectCommand.CommandTimeout = 5; DataTable dataTable = new DataTable(); //Adap = null; Adap.Fill(dataTable); List list = new List(); foreach (DataRow dr in dataTable.AsEnumerable()) { GridItemEventResult mm = new GridItemEventResult(); //mm.WorkAreaID = dr.Field("workarea_id"); mm.EventID = dr.Field(GlobalConfig.EventIDColName); mm.EventTime = dr.Field("EventTime"); mm.OTime = DateTime.Parse(mm.EventTime); mm.OriginTime = dr.Field("EventTime"); mm.X = dr.Field("Y"); mm.Y = dr.Field("X"); mm.Z = dr.Field("Z"); mm.ML = dr.Field("ML"); mm.LocSta = dr.Field("LocSta"); mm.MLSta = dr.Field("MLSta"); mm.Energy = GetEnergy(mm.ML); list.Add(mm); } return list; } } catch (Exception ex) { throw ex; } finally { this.Dispose(); } return null; } public List GetGridEvents(DateTime startTime, DateTime endTime, double minML, double maxML) { try { if (DBConnection()) { string courseSql = @"select * from " + GlobalConfig.UseResultTable + " where EventTime>=@stime and EventTime<=@etime and (ML>=@minML and ML<=@maxML)"; Adap = new MySqlDataAdapter(courseSql, RemoteConn); string startStr = startTime.Year.ToString() + "-" + startTime.Month.ToString("D2") + "-" + startTime.Day.ToString("D2") + "T" + startTime.Hour.ToString("D2") + ":" + startTime.Minute.ToString("D2") + ":" + startTime.Second.ToString("D2"); string endStr = endTime.Year.ToString() + "-" + endTime.Month.ToString("D2") + "-" + endTime.Day.ToString("D2") + "T" + endTime.Hour.ToString("D2") + ":" + endTime.Minute.ToString("D2") + ":" + endTime.Second.ToString("D2"); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@stime", MySqlDbType.VarChar) { Value = startStr }); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@etime", MySqlDbType.VarChar) { Value = endStr }); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@minML", MySqlDbType.Double) { Value = minML }); Adap.SelectCommand.Parameters.Add(new MySqlParameter("@maxML", MySqlDbType.Double) { Value = maxML }); DataTable dataTable = new DataTable(); Adap.Fill(dataTable); List list = new List(); foreach (DataRow dr in dataTable.AsEnumerable()) { GridItemEventResult mm = new GridItemEventResult(); //mm.WorkAreaID = dr.Field("workarea_id"); mm.EventID = dr.Field(GlobalConfig.EventIDColName); mm.EventTime = dr.Field("EventTime"); mm.OTime = DateTime.Parse(mm.EventTime); mm.OriginTime = dr.Field("EventTime"); mm.X = dr.Field("Y"); mm.Y = dr.Field("X"); mm.Z = dr.Field("Z"); mm.ML = dr.Field("ML"); mm.LocSta = dr.Field("LocSta"); mm.MLSta = dr.Field("MLSta"); mm.SetEnergy(); //mm.Energy = GetEnergy(mm.ML); list.Add(mm); } return list; } } catch (Exception ex) { //messagebox.show throw ex; } finally { this.Dispose(); } return null; } public double GetEnergy(double ml) { double mi = Math.Round(4.83 + 1.47 * ml, 4); return Math.Round(Math.Pow(10, mi), 0); } } }