You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

363 lines
16 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<PropertyChangedEventArgs> StaticPropertyChanged;
public static bool IsDesign = false;
public static DateTime DStartTime = new DateTime(2022, 9, 1, 16, 28, 0);
public static int DRefreshInterval = 1;
/// <summary>
/// 设备整体灵敏度
/// </summary>
public const double KW = 833760427.0;
/// <summary>
/// 波形截取长度(点数)
/// </summary>
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<string> DwgLayersDisplay = new List<string>();
//public static List<Color> eventDepthColor = new List<Color>();
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<CadLayerModel> cadLayerConfigs = new ObservableCollection<CadLayerModel>();
public static ObservableCollection<CadLayerModel> 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<ProjectConfigModel>(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<CadLayerModel>(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<ReportEventLevel>(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<string, StationModel> CreateStationFromCSV(string fn)
{
Dictionary<string, StationModel> stations = new Dictionary<string, StationModel>();
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<FMStation>();
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<string> ReadDwgLayerDisplay()
{
List<string> lds= new List<string>();
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<string, StationModel> 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<FocalMechanism.Model.FMStation>();
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]);
}
}
}