using Aspose.Cells; using log4net; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using SciColorMaps.Portable; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Data; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using Txgy.EWS.Client.FocalMechanism.Core; using Txgy.EWS.Client.FocalMechanism.Model; using Txgy.EWS.Client.Models; using Txgy.Microseismic.BaseLib.Models; using WW.Cad.Base; using FmGrid = Txgy.EWS.Client.FocalMechanism.Model.FmGrid; using FMStation = Txgy.EWS.Client.FocalMechanism.Model.FMStation; namespace Txgy.EWS.Client.Common { public class GlobalConfig { public static event EventHandler StaticPropertyChanged; public static bool IsDesign = false; public static DateTime DStartTime = new DateTime(2022, 9, 1, 16, 28, 0); public static int DRefreshInterval = 1; /// /// 设备整体灵敏度 /// public const double KW = 833760427.0; /// /// 波形截取长度(点数) /// public const int WaveCutLen = 1000; public static string timeFormatStr = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFF"; public static ProjectConfigModel ProjectConfig { get; set; } public static FocalMechanism.Model.FmGrid fmGrid { get; set; } public static int StationCount; public static double BaseX, BaseY,BaseZ; public static List DwgLayersDisplay = new List(); //public static List eventDepthColor = new List(); public static bool IsRealtime; public static string UseResultTable; public static string UseWaveDataTable; public static string UseFocalMechanismTable; public static string DataTypeString; public static string EventIDColName; public static Color[] eventDepthColor; public static string ColorPalette = "plasma"; public static int ColorCountDefault = 256; public static double eventDSize = 1; public static ProcessCore fmCore; public static Factory fmFactory; private static ObservableCollection cadLayerConfigs = new ObservableCollection(); public static ObservableCollection CadLayerConfigs { get { return cadLayerConfigs; } set { cadLayerConfigs = value; StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("CadLayerConfigs")); } } private static string _systemNameCN; public static string SystemNameCN { get { return _systemNameCN; } set { _systemNameCN = value; StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("SystemNameCN")); } } private static string _systemNameEN; public static string SystemNameEN { get { return _systemNameEN; } set { _systemNameEN = value; StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("SystemNameEN")); } } private static string _commpanyName; public static string CommpanyName { get { return _commpanyName; } set { _commpanyName = value; StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("CommpanyName")); } } private static string _workAreaName; public static string WorkAreaName { get { return _workAreaName; } set { _workAreaName = value; StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("WorkAreaName")); } } private static string _systemShortName; public static string SystemShortName { get { return _systemShortName; } set { _systemShortName = value; StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("SystemShortName")); } } public static void ReadConfig() { string cn = System.Configuration.ConfigurationManager.AppSettings["SystemNameCn"].ToString(); GlobalConfig.SystemNameCN = System.Configuration.ConfigurationManager.AppSettings["SystemNameCn"].ToString(); GlobalConfig.SystemNameEN = System.Configuration.ConfigurationManager.AppSettings["SystemNameEn"].ToString(); GlobalConfig.CommpanyName = System.Configuration.ConfigurationManager.AppSettings["CommpanyName"].ToString(); GlobalConfig.WorkAreaName = System.Configuration.ConfigurationManager.AppSettings["WorkAreaName"].ToString(); GlobalConfig.SystemShortName = System.Configuration.ConfigurationManager.AppSettings["SystemShortName"].ToString(); string jsonText; //读取工区配置文件 using (System.IO.StreamReader sr = new System.IO.StreamReader(AppDomain.CurrentDomain.BaseDirectory + System.Configuration.ConfigurationManager.AppSettings["WorkAreaFilePath"].ToString())) { jsonText = sr.ReadToEnd(); } ProjectConfig = JsonConvert.DeserializeObject(jsonText); //初始化波形数据、Json文件路径 InitializationPath(); //从app.config内读取X,Y基址 //BaseX = double.Parse(System.Configuration.ConfigurationManager.AppSettings["BaseX"].ToString()); //BaseY = double.Parse(System.Configuration.ConfigurationManager.AppSettings["BaseY"].ToString()); //从ProjectConfig中读取EMin,NMin作为X,Y基址 BaseX = ProjectConfig.WorkArea.EMin; BaseY = ProjectConfig.WorkArea.NMin; BaseZ= double.Parse(System.Configuration.ConfigurationManager.AppSettings["BaseZ"].ToString()); //读取Cad层配置文件 //using (System.IO.StreamReader sr = new System.IO.StreamReader(AppDomain.CurrentDomain.BaseDirectory + // System.Configuration.ConfigurationManager.AppSettings["DwgJsonSetting"].ToString())) //{ // jsonText = sr.ReadToEnd(); //} //读取Dwg图层配置文件 string jsonFile = AppDomain.CurrentDomain.BaseDirectory + System.Configuration.ConfigurationManager.AppSettings["DwgJsonSetting"].ToString(); var jlist = CadLayerModel.CreateFromJson(jsonFile); GlobalConfig.CadLayerConfigs = new ObservableCollection(jlist); foreach (var item in GlobalConfig.CadLayerConfigs) { item.SetColor(); } //读取报表事件分级配置文件 string eventLevelFile= AppDomain.CurrentDomain.BaseDirectory + System.Configuration.ConfigurationManager.AppSettings["ReportEventLevelSetting"].ToString(); var elList = ReportEventLevel.CreateFromJson(eventLevelFile); GlobalData.ReportEventLevelList= new ObservableCollection(elList); //设置实时监测数据配置文件 IsRealtime=bool.Parse(System.Configuration.ConfigurationManager.AppSettings["IsRealtime"].ToString()); if (IsRealtime) { UseResultTable = System.Configuration.ConfigurationManager.AppSettings["RealtimeResultTable"].ToString(); UseFocalMechanismTable = System.Configuration.ConfigurationManager.AppSettings["RealtimeFocalmechanismTable"].ToString(); UseWaveDataTable= System.Configuration.ConfigurationManager.AppSettings["RealtimeWaveDataTable"].ToString(); DataTypeString = "A"; EventIDColName = "RTEventID"; } else { UseResultTable = System.Configuration.ConfigurationManager.AppSettings["PostResultTable"].ToString(); UseFocalMechanismTable = System.Configuration.ConfigurationManager.AppSettings["PostFocalmechanismTable"].ToString(); UseWaveDataTable = System.Configuration.ConfigurationManager.AppSettings["PostWaveDataTable"].ToString(); DataTypeString = "B"; EventIDColName = "PostEventID"; } //从app.config内读取Cad背景图文件 ProjectConfig.CadFileName = AppDomain.CurrentDomain.BaseDirectory + System.Configuration.ConfigurationManager.AppSettings["CadDwgFilePath"].ToString(); //从app.config内读取台站列表文件 ProjectConfig.StationDic = CreateStationFromCSV(AppDomain.CurrentDomain.BaseDirectory + System.Configuration.ConfigurationManager.AppSettings["StationsCsvFilePath"].ToString()); //台站数量 StationCount = ProjectConfig.StationDic.Count; //创建深度颜色数组 var colorMap = new ColorMap(ColorPalette, colorCount: ColorCountDefault); //var cmap3 = new MirrorColorMap(cmap2); eventDepthColor = colorMap.Colors().Select((color) => color.ToMediaColor()).ToArray(); //配置震源机制参数 FocalMechanism.Model.FmGrid fmGrid = CreateFmGrid(GlobalConfig.ProjectConfig.WorkArea.EMax - GlobalConfig.ProjectConfig.WorkArea.EMin, GlobalConfig.ProjectConfig.WorkArea.NMax - GlobalConfig.ProjectConfig.WorkArea.NMin, GlobalConfig.ProjectConfig.StationDic); GlobalConfig.fmCore = new ProcessCore(fmGrid); GlobalConfig.fmFactory = new Factory(fmGrid); } public static void InitializationPath() { ProjectConfig.MseedFilePath = System.Configuration.ConfigurationManager.AppSettings["WavesMseedFilePath"].ToString(); ProjectConfig.TxtFilePath= System.Configuration.ConfigurationManager.AppSettings["WavesTxtFilePath"].ToString(); if (!Directory.Exists(ProjectConfig.MseedFilePath)) { Directory.CreateDirectory(ProjectConfig.MseedFilePath); } if (File.Exists(ProjectConfig.TxtFilePath)) { // Console.WriteLine(File.GetAttributes(ProjectConfig.CacheFilePath).ToString()); File.SetAttributes(ProjectConfig.TxtFilePath, FileAttributes.Hidden); } else { Directory.CreateDirectory(ProjectConfig.TxtFilePath); File.SetAttributes(ProjectConfig.TxtFilePath, FileAttributes.Hidden); } } public static void SaveConfig() { } public static Dictionary CreateStationFromCSV(string fn) { Dictionary stations = new Dictionary(); Aspose.Cells.TxtLoadOptions lo = new TxtLoadOptions(); lo.Encoding = Encoding.Default;//设置编码方式 Workbook workbook = new Workbook(fn, lo); //配置读取文件的类型(CSV) workbook.FileFormat = FileFormatType.CSV;//可在此配置Excel文件类型 Worksheet worksheet = workbook.Worksheets[0];//默认第一个Sheet页 Cells cells = worksheet.Cells; //读取到DataTable中 DataTable dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxColumn + 1, true); for (int i = 0; i < dt.Rows.Count; i++) { DataRow row = dt.Rows[i]; StationModel model = new StationModel(); model.Name = row[1].ToString(); model.E = double.Parse(row[2].ToString()); model.N = double.Parse(row[3].ToString()); model.Z = double.Parse(row[4].ToString()); model.Sens = double.Parse(row[5].ToString()); model.BeginUseTime = DateTime.Parse(row[6].ToString()); model.StopUseTime = DateTime.Parse(row[7].ToString()); stations.Add(model.Name, model); } //释放资源 workbook = null; worksheet = null; return stations; } public static FmGrid CreateFmGrid(ProjectConfigModel projectConfigModel) { FmGrid fg = new FmGrid(); fg.xmax = projectConfigModel.WorkArea.EMax - projectConfigModel.WorkArea.EMin; fg.ymax = projectConfigModel.WorkArea.NMax - projectConfigModel.WorkArea.NMin; fg.xmin = 0; fg.ymin = 0; fg.StationCount = projectConfigModel.StationDic.Count; fg.StationList = new List(); int sc = 0; foreach (var item in projectConfigModel.StationDic) { fg.StationList.Add(new FMStation(sc, item.Key, item.Value.E - projectConfigModel.WorkArea.EMin, item.Value.N - projectConfigModel.WorkArea.NMin)); fg.StationList.Add(new FMStation(sc, item.Key, item.Value.E, item.Value.N)); sc++; } fg.initZeroCenter(); fg.computeDistance(); return fg; } public static List ReadDwgLayerDisplay() { List lds= new List(); string filePath = AppDomain.CurrentDomain.BaseDirectory + System.Configuration.ConfigurationManager.AppSettings["DwgSettings"].ToString(); string[] rows; using (StreamReader sr=new StreamReader(filePath)) { rows = sr.ReadToEnd().Trim().Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); } for (int i = 1; i < rows.Length; i++) { lds.Add(rows[i].Trim('\r')); } return lds; } public static FocalMechanism.Model.FmGrid CreateFmGrid(double XMax, double YMax, Dictionary StationDic) { FocalMechanism.Model.FmGrid fmGrid = new FocalMechanism.Model.FmGrid(); fmGrid.xmin = 0; fmGrid.xmax = XMax; fmGrid.ymin = 0; fmGrid.ymax = YMax; fmGrid.StationCount = StationDic.Count; fmGrid.StationList = new List(); int sc = 0; foreach (var item in StationDic) { fmGrid.StationList.Add(new FocalMechanism.Model.FMStation(sc, item.Key, item.Value.E - GlobalConfig.ProjectConfig.WorkArea.EMin, item.Value.N - GlobalConfig.ProjectConfig.WorkArea.NMin)); sc++; } fmGrid.initZeroCenter(); fmGrid.computeDistance(); return fmGrid; } public static class LogObject { public static ILog Log(string LoggerName) { //log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); return LogManager.GetLogger(LoggerName); } } public static void WriteLog(string exp = null, string loggerName = "InfoLogger") { //新建的一个静态类 LogObject.Log(loggerName).Info(exp); LogObject.Log(loggerName).Error(exp); } } public static class ColorUtils { public static Color ToMediaColor(this byte[] rgb) { return Color.FromRgb(rgb[0], rgb[1], rgb[2]); } } }