using ivf_tl_Entity.Entity.Alarm; using ivf_tl_Entity.Entity.balance; using ivf_tl_Entity.Entity.Result; using ivf_tl_Entity.Enums; using ivf_tl_Manage.ViewModels; using ivf_tl_Manage.Win; using ivf_tl_Service; using ivf_tl_Service.HttpProvider; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.IO; using System.Linq; using System.Resources; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Xml; using System.Xml.Linq; namespace ivf_tl_Manage { public class AppData { public static AppData Instance = new Lazy(() => new AppData(), System.Threading.LazyThreadSafetyMode.PublicationOnly).Value; public int Measurement { get; set; } = 6; public string PicSuf { get; set; } = ".jpg"; public string DefeatPan { get; set; } = "C"; public string TLPassWord { get; set; } = "tl13579"; public string OutInterString { get; set; } = "1"; public string CleanVideoString { get; set; } = "-"; public Dictionary> EnableKeyValues { get; set; } = new Dictionary>(); private AppData() { EnableKeyValues.Clear(); if (int.TryParse(ConfigurationManager.AppSettings["Measurement"].ToString(), out int newMe)) { Measurement = newMe; } var AllEnabled = ConfigurationManager.AppSettings["houseEnabled"]; if (!string.IsNullOrEmpty(AllEnabled)) { var tlEnable = AllEnabled.Split(";"); string[] houseEnable; int houseCount, houseEnableNum; string enabelTlsn; foreach (var itemTl in tlEnable) { houseEnable = itemTl.Split(","); houseCount = houseEnable.Count(); if(houseCount >= 2) { enabelTlsn = houseEnable[0]; List enableValue = new List(); for (int i = 1; i < houseCount; i++) { if (int.TryParse(houseEnable[i],out houseEnableNum)) { enableValue.Add(houseEnableNum); } } EnableKeyValues.Add(enabelTlsn, enableValue); } } } //var aa = Application.Current.Resources.MergedDictionaries; BaseUrl = $"{ConfigurationManager.AppSettings["urlIp"]}:{ConfigurationManager.AppSettings["urlPort"]}/"; MqttIp = ConfigurationManager.AppSettings["mqttIp"].ToString(); MqttPort = int.Parse(ConfigurationManager.AppSettings["mqttPort"]); OutInterString = ConfigurationManager.AppSettings["outInter"].ToString(); if (OutInterString == "1") { //测试环境外网 BaseUrl = "http://test-gateway.aivfo.com:36000/"; MqttIp = "211.149.139.131"; MqttPort = 62883; } #if DEBUG //开发环境外网 BaseUrl = "http://gateway.aivfo.com:36000/"; MqttIp = "211.149.139.131"; MqttPort = 61883; //测试环境外网 BaseUrl = "http://test-gateway.aivfo.com:36000/"; MqttIp = "211.149.139.131"; MqttPort = 62883; //开发环境 //BaseUrl = "http://192.168.0.207:10010/"; //MqttIp = "192.168.0.207"; //MqttPort = 1883; //测试环境 //BaseUrl = "http://192.168.0.91:10010/"; //MqttIp = "192.168.0.91"; //MqttPort = 1883; //BaseUrl = "http://gateway-28.aivfo.com:36000/"; #endif LogService = new LogService() { Pan = DefeatPan }; HttpServiceCall = new HttpServiceCall(BaseUrl, LogService); //ResolutionAdapter = new ResolutionAdapter(); } //public string BaseUrl { get; set; } = "http://gateway.aivfo.com:36000/"; public string BaseUrl = "http://192.168.31.89:10010/"; public string MqttIp = "211.149.139.131"; public int MqttPort = 1883; /// /// 主窗口 /// public MainWindow MainWindow { get; set; } public MainWindowViewModel MainWindowViewModel { get; set; } public HttpServiceCall HttpServiceCall { get; set; } public LogService LogService { get; set; } public List FertilizationTypeEntitieList { get; set; } public TLInfo CurrentTlInfo { get; set; } #region public DishProvider GetDishProvider() { return new DishProvider(HttpServiceCall, LogService); } public DetailProvider GetDetailProvider() { return new DetailProvider(HttpServiceCall, LogService); } public TLInfoProvider GetTLInfoProvider() { return new TLInfoProvider(HttpServiceCall, LogService); } public MarkSettingProvider GetMarkSettingProvider() { return new MarkSettingProvider(HttpServiceCall, LogService); } public PicProvider GetPicProvider() { return new PicProvider(HttpServiceCall, LogService); } public AlarmProvider GetAlarmProvider() { return new AlarmProvider(HttpServiceCall, LogService); } public SettingProvider GetSettingProvider() { return new SettingProvider(HttpServiceCall, LogService); } public HouseProvider GetHouseProvider() { return new HouseProvider(HttpServiceCall, LogService); } public MarkProvider GetMarkProvider() { return new MarkProvider(HttpServiceCall, LogService); } #endregion public BitmapImage StringToBitmapImage(string imageurl) { try { BitmapImage bitImage = new BitmapImage(); bitImage.BeginInit(); bitImage.UriSource = new Uri(imageurl, UriKind.Absolute); bitImage.CacheOption = BitmapCacheOption.OnLoad; bitImage.EndInit(); return bitImage; } catch (Exception ex) { LogService.ExceptionLog(ex, "StringToBitmapImage", ivf_tl_Entity.Enums.LogEnum.RunException); return null; } } public void ChangeLanguage(string languageName) { try { ResourceDictionary langRd = null; #if DEBUG string xamlFilePath = @"C:\PersonalSpace\work\1 VisualWorkSpace\PCLan\" + languageName; #else string xamlFilePath = $"{System.AppDomain.CurrentDomain.BaseDirectory}\\Language\\{languageName}"; #endif if (!File.Exists(xamlFilePath)) { new MessageBoxWindow("提示", $"切换语言失败,配置文件不存在:{xamlFilePath}", MainWindow).ShowDialog(); return; } using (var stream = new FileStream(xamlFilePath, FileMode.Open)) { langRd = System.Windows.Markup.XamlReader.Load(stream) as ResourceDictionary; } if (langRd != null) { int count = Application.Current.Resources.MergedDictionaries.Count; if (count >= 3) { Application.Current.Resources.MergedDictionaries.RemoveAt(count - 1); } Application.Current.Resources.MergedDictionaries.Add(langRd); setAppConfig(languageName); //Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); //config.AppSettings.Settings["Language"].Value = languageName; //config.Save(ConfigurationSaveMode.Modified); //System.Configuration.ConfigurationManager.RefreshSection("appSettings"); } else { new MessageBoxWindow("提示", $"切换语言失败,文件转ResourceDictionary失败;{xamlFilePath}", MainWindow).ShowDialog(); } } catch (Exception ex) { new MessageBoxWindow("提示", $"切换语言异常,{JsonConvert.SerializeObject(ex)}", MainWindow).ShowDialog(); return; } } public void setAppConfig(string languageName) { try { string fileName = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "ivf_tl_Manage.dll.config"); if (!File.Exists(fileName)) return; var xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); var tags = xmlDoc.GetElementsByTagName("appSettings"); XmlNode appSettingsNode = xmlDoc.SelectSingleNode("configuration/appSettings"); if (appSettingsNode != null) { XmlNodeList addNodes = appSettingsNode.SelectNodes("add"); foreach (XmlNode addNode in addNodes) { if (addNode.Attributes["key"].Value == "Language") { addNode.Attributes["value"].Value = languageName; } } } xmlDoc.Save(fileName); System.Configuration.ConfigurationManager.RefreshSection("appSettings"); xmlDoc = null; } catch (Exception ex) { return; } } public BitmapImage ByteToBitmapImage(byte[] imageData) { try { if (imageData == null || imageData.Length == 0) return null; var bitmap = new BitmapImage(); using (var stream = new MemoryStream(imageData)) { bitmap.BeginInit(); bitmap.CacheOption = BitmapCacheOption.OnLoad; // 加载后释放流 bitmap.StreamSource = stream; bitmap.EndInit(); } bitmap.Freeze(); // 可选:使图像跨线程安全 return bitmap; } catch (Exception ex) { LogService.ExceptionLog(ex, "ByteToBitmapImage", ivf_tl_Entity.Enums.LogEnum.RunException); return null; } } public BitmapImage LogoBitmapImage(LogoEnum logoEnum) { try { #if DEBUG string basePath = @"C:\PersonalSpace\work\1 VisualWorkSpace\LogoFile"; #else string basePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "LogoFile"); #endif string logoFile = string.Empty; switch (logoEnum) { case LogoEnum.Login: logoFile = "LoginLogo.png"; break; case LogoEnum.Rectangle: logoFile = "RectangleLogo.png"; break; case LogoEnum.Circle: logoFile = "CircleLogo.png"; break; default: break; } if (string.IsNullOrEmpty(logoFile)) return null; string filePath = Path.Combine(basePath, logoFile); if (!File.Exists(filePath)) return null; BitmapImage bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.UriSource = new Uri(filePath); bitmap.CacheOption = BitmapCacheOption.OnLoad; bitmap.EndInit(); bitmap.Freeze(); return bitmap; } catch (Exception ex) { return null; } } public void SetImageSource(Image image, LogoEnum logoEnum) { image.Source = LogoBitmapImage(logoEnum); } public string SaveFileName(string wifeName) { var dialog = new Microsoft.Win32.SaveFileDialog(); dialog.FileName = $"{wifeName}_{DateTime.Now.ToString("MM-dd-HH-mm")}_AI图像分析报告.pdf"; dialog.DefaultExt = ".pdf"; dialog.Filter = "pdf|*.pdf"; if (dialog.ShowDialog() != true) { return null; } return dialog.FileName; } } }