App.xaml.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. using Prism.Ioc;
  2. using Prism.Modularity;
  3. using Prism.Services.Dialogs;
  4. using Prism.Unity;
  5. using SqlSugar;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Configuration;
  9. using System.Data;
  10. using System.Globalization;
  11. using System.IO;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading;
  15. using System.Threading.Tasks;
  16. using System.Web.UI.WebControls;
  17. using System.Windows;
  18. using System.Windows.Controls;
  19. using System.Windows.Media.Media3D;
  20. using Team.FFFeederService;
  21. using Team.FFFeederService.Interfaces;
  22. using Team.Utility;
  23. using TeamAAS_VP;
  24. using TeamAAS_VP.Controls;
  25. using TeamAAS_VP.Core;
  26. using TeamAAS_VP.Core.ScrewDriver;
  27. using TeamAAS_VP.Interfaces;
  28. using TeamAAS_VP.Properties;
  29. using TeamAAS_VP.Resources.Languages;
  30. using TeamAAS_VP.Services;
  31. using TeamAAS_VP.ViewModels;
  32. using TeamAAS_VP.ViewModels.Calibration;
  33. using TeamAAS_VP.ViewModels.DebugMod;
  34. using TeamAAS_VP.ViewModels.Home;
  35. using TeamAAS_VP.ViewModels.Product;
  36. using TeamAAS_VP.ViewModels.User;
  37. using TeamAAS_VP.Views;
  38. using TeamAAS_VP.Views.Calibration;
  39. using TeamAAS_VP.Views.DebugMod;
  40. using TeamAAS_VP.Views.Home;
  41. using TeamAAS_VP.Views.Product;
  42. using TeamAAS_VP.Views.Setting;
  43. using TeamAAS_VP.Views.User;
  44. using WPFLocalizeExtension.Engine;
  45. [assembly: log4net.Config.XmlConfigurator(ConfigFile = "App.config", ConfigFileExtension = "config", Watch = true)]
  46. namespace TeamAAS_VP
  47. {
  48. /// <summary>
  49. /// App.xaml 的交互逻辑
  50. /// </summary>
  51. public partial class App : PrismApplication
  52. {
  53. private static System.Threading.Mutex mutex;
  54. protected override Window CreateShell()
  55. {
  56. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  57. var mainWindow = this.Container.Resolve<MainWindowView>();
  58. var _configService = this.Container.Resolve<IConfigService>();
  59. var _databaseInitializer = this.Container.Resolve<IDatabaseInitializer>();
  60. // 1. 读取配置参数
  61. _configService.LoadAll();
  62. try
  63. {
  64. _databaseInitializer.InitializeDatabase();
  65. }
  66. catch (Exception ex)
  67. {
  68. LogHelper.WriteLogError("Database initialization failed during application startup", ex);
  69. }
  70. // 设置语言
  71. var currentlanguage = _configService.GetSystemConfiguration().CurrentLanguage;
  72. _configService.SetCurrentLanguage(currentlanguage);
  73. var cardLogin = this.Container.Resolve<CardLoginWindow>();
  74. var result = cardLogin.ShowDialog();
  75. if (result is bool st1 && !st1)
  76. {
  77. this.Shutdown();
  78. }
  79. return mainWindow;
  80. }
  81. protected override void RegisterTypes(IContainerRegistry containerRegistry)
  82. {
  83. //------------------------注册导航视图------------------------------------------------
  84. containerRegistry.RegisterForNavigation<HomeView>();
  85. containerRegistry.RegisterForNavigation<ProductsView>();
  86. containerRegistry.RegisterForNavigation<DebugView>();
  87. containerRegistry.RegisterForNavigation<SettingView>();
  88. containerRegistry.RegisterForNavigation<CalibrationView>();
  89. containerRegistry.RegisterForNavigation<StatisticsView>();
  90. containerRegistry.RegisterForNavigation<UserView>();
  91. containerRegistry.RegisterForNavigation<Views.User.LoginView>();
  92. containerRegistry.RegisterForNavigation<SignUpView>();
  93. containerRegistry.RegisterForNavigation<RobotManualStep>();
  94. containerRegistry.RegisterForNavigation<FeederManual>();
  95. containerRegistry.RegisterForNavigation<VisionSolution>();
  96. containerRegistry.RegisterForNavigation<InchingControl>();
  97. containerRegistry.RegisterForNavigation<ScriptHome>();
  98. containerRegistry.RegisterForNavigation<FeederClear>();
  99. containerRegistry.RegisterForNavigation<AfagFeederManual>();
  100. containerRegistry.RegisterForNavigation<LightManual>();
  101. containerRegistry.RegisterForNavigation<FocusAnalyzer, FocusAnalyzerViewModel>();
  102. //产品
  103. containerRegistry.RegisterForNavigation<ProductHome>();
  104. containerRegistry.RegisterForNavigation<ProductDescription>();
  105. containerRegistry.RegisterForNavigation<ProductProcessManage>();
  106. containerRegistry.RegisterForNavigation<ProcessBasics>();
  107. containerRegistry.RegisterForNavigation<SimpleProcedure>();
  108. containerRegistry.RegisterForNavigation<AdvancedProcedure>();
  109. containerRegistry.RegisterForNavigation<CameraParams>();
  110. containerRegistry.RegisterForNavigation<FeederParams>();
  111. containerRegistry.RegisterForNavigation<ProcedureVisionOutput>();
  112. containerRegistry.RegisterForNavigation<RobotPointParams>();
  113. containerRegistry.RegisterForNavigation<PlcPointParams>();
  114. containerRegistry.RegisterForNavigation<ProductParams>();
  115. containerRegistry.RegisterForNavigation<ProcedureParams>();
  116. containerRegistry.RegisterForNavigation<AfagFeederParams>();
  117. //校准
  118. containerRegistry.RegisterForNavigation<CalibrationAuto>();
  119. containerRegistry.RegisterForNavigation<CalibrationBasics>();
  120. containerRegistry.RegisterForNavigation<CalibrationCameraParams>();
  121. containerRegistry.RegisterForNavigation<CalibrationEditVision>();
  122. containerRegistry.RegisterForNavigation<CalibrationHome>();
  123. containerRegistry.RegisterForNavigation<CalibrationResult>();
  124. containerRegistry.RegisterForNavigation<CalibrationSelectTool>();
  125. containerRegistry.RegisterForNavigation<CalibrationTeachCenterPoint>();
  126. containerRegistry.RegisterForNavigation<CalibrationVerification>();
  127. containerRegistry.RegisterForNavigation<FixedUpCameraFindP0>();
  128. //**************************************************************************************
  129. //------------------------注册单类------------------------------------------------
  130. containerRegistry.RegisterSingleton<IConfigService, ConfigService>();
  131. containerRegistry.RegisterSingleton<ICalibrationService, CalibrationService>();
  132. containerRegistry.RegisterSingleton<ICameraService, CameraService>();
  133. containerRegistry.RegisterSingleton<IRobotService, RobotService>();
  134. containerRegistry.RegisterSingleton<IPlcService, PlcService>();
  135. containerRegistry.RegisterSingleton<IFeederService, FeederService>();
  136. containerRegistry.RegisterSingleton<IProductService, ProductService>();
  137. containerRegistry.RegisterSingleton<IRemoteCommandService, RemoteCommandService>();
  138. containerRegistry.RegisterSingleton<ILightManagerService, LightManagerService>();
  139. containerRegistry.RegisterSingleton<ICameraCalibrationService, CameraCalibrationService>();
  140. containerRegistry.RegisterSingleton<IMesService, MesService>();
  141. containerRegistry.RegisterSingleton<Management>();
  142. containerRegistry.RegisterSingleton<CardLoginWindowViewModel>();
  143. containerRegistry.RegisterSingleton<TorqueService>();
  144. // Register system database service and initializer
  145. containerRegistry.RegisterSingleton<ISystemDatabaseService, TeamAAS_VP.Data.SystemDatabaseService>();
  146. containerRegistry.RegisterSingleton<IDatabaseInitializer, TeamAAS_VP.Data.DatabaseInitializer>();
  147. containerRegistry.RegisterSingleton<ShowVisionRenderViewModel>();
  148. containerRegistry.RegisterSingleton<InchingControlViewModel>();
  149. //containerRegistry.RegisterSingleton<ScriptHomeViewModel>();
  150. containerRegistry.RegisterSingleton<DebugViewModel>();
  151. containerRegistry.RegisterSingleton<FeederClearViewModel>();
  152. containerRegistry.RegisterSingleton<AfagFeederManual>();
  153. containerRegistry.RegisterSingleton<HomeViewModel>();
  154. containerRegistry.RegisterSingleton<FocusAnalyzerViewModel>();
  155. //产品
  156. containerRegistry.RegisterSingleton<ProductDescriptionViewModel>();
  157. containerRegistry.RegisterSingleton<ProductHomeViewModel>();
  158. containerRegistry.RegisterSingleton<ProductsViewModel>();
  159. containerRegistry.RegisterSingleton<ProductProcessManageViewModel>();
  160. containerRegistry.RegisterSingleton<ProcessBasicsViewModel>();
  161. containerRegistry.RegisterSingleton<SimpleProcedureViewModel>();
  162. containerRegistry.RegisterSingleton<AdvancedProcedureViewModel>();
  163. containerRegistry.RegisterSingleton<CameraParamsViewModel>();
  164. containerRegistry.RegisterSingleton<FeederParamsViewModel>();
  165. containerRegistry.RegisterSingleton<ProcedureVisionOutputViewModel>();
  166. containerRegistry.RegisterSingleton<RobotPointParamsViewModel>();
  167. containerRegistry.RegisterSingleton<PlcPointParamsViewModel>();
  168. containerRegistry.RegisterSingleton<ProductParamsViewModel>();
  169. containerRegistry.RegisterSingleton<ProcedureParamsViewModel>();
  170. containerRegistry.RegisterSingleton<AfagFeederParamsViewModel>();
  171. //校准
  172. containerRegistry.RegisterSingleton<CalibrationAutoViewModel>();
  173. containerRegistry.RegisterSingleton<CalibrationBasicsViewModel>();
  174. containerRegistry.RegisterSingleton<CalibrationCameraParamsViewModel>();
  175. containerRegistry.RegisterSingleton<CalibrationEditVisionViewModel>();
  176. containerRegistry.RegisterSingleton<CalibrationHomeViewModel>();
  177. containerRegistry.RegisterSingleton<CalibrationResultViewModel>();
  178. containerRegistry.RegisterSingleton<CalibrationSelectToolViewModel>();
  179. containerRegistry.RegisterSingleton<CalibrationTeachCenterPointViewModel>();
  180. containerRegistry.RegisterSingleton<CalibrationVerificationViewModel>();
  181. containerRegistry.RegisterSingleton<FixedUpCameraFindP0ViewModel>();
  182. //**************************************************************************************
  183. //------------------------注册对话框------------------------------------------------
  184. containerRegistry.RegisterDialog<AddRobot>();
  185. containerRegistry.RegisterDialog<AddFeeder>();
  186. containerRegistry.RegisterDialog<AddPlc>();
  187. containerRegistry.RegisterDialog<AddScrewFeeder>();
  188. containerRegistry.RegisterDialog<AddCamera>();
  189. containerRegistry.RegisterDialog<EditCamera>();
  190. containerRegistry.RegisterDialog<PalletManage>();
  191. containerRegistry.RegisterDialog<UProgressBar>();
  192. containerRegistry.RegisterDialog<CalibTool>();
  193. containerRegistry.RegisterDialog<ShowCalibrationResult>();
  194. containerRegistry.RegisterDialog<FeederBlobParams>();
  195. containerRegistry.RegisterDialog<CalculateOffsetU>();
  196. containerRegistry.RegisterDialog<VisionScriptPage>();
  197. containerRegistry.RegisterDialog<SelectCameraBrand>();
  198. containerRegistry.RegisterDialog<AddLightController>();
  199. containerRegistry.RegisterDialog<LightChannelList>();
  200. containerRegistry.RegisterDialog<AutoCorrectLockPoint>();
  201. containerRegistry.RegisterDialog<ImageDisplay>();
  202. containerRegistry.RegisterDialog<TorqueCheck>();
  203. containerRegistry.RegisterDialog<VisionStaticAccuracyAnalyzer>();
  204. containerRegistry.RegisterDialog<VisionDynamicAccuracyAnalyzer>();
  205. containerRegistry.RegisterDialog<AddScrew>();
  206. containerRegistry.RegisterDialog<ChangeHeader>();
  207. containerRegistry.RegisterDialog<ChangeNozzle>();
  208. containerRegistry.RegisterDialog<PlcPointOffserParams>();
  209. containerRegistry.RegisterDialog<PickScrewAccuracyAnalyzer>();
  210. containerRegistry.RegisterDialog<ImagePreviewWindow>();
  211. //**************************************************************************************
  212. // 注册 SQLSugar 客户端(单例模式)
  213. containerRegistry.RegisterSingleton<ISqlSugarClient>(s =>
  214. {
  215. // 规范化数据库路径(使用绝对路径和平台分隔符)
  216. string relative = Path.Combine("..", "Database File", "System.db");
  217. string fullDbPath = Path.GetFullPath(relative); // 变为绝对路径
  218. Directory.CreateDirectory(Path.GetDirectoryName(fullDbPath)); // 确保目录存在
  219. string connectionString = $"Data Source={fullDbPath};Version=3;";
  220. //Scoped用SqlSugarClient
  221. SqlSugarClient sqlSugar = new SqlSugarClient(new ConnectionConfig()
  222. {
  223. DbType = SqlSugar.DbType.Sqlite,
  224. ConnectionString = connectionString,
  225. IsAutoCloseConnection = false,
  226. InitKeyType = InitKeyType.Attribute // 初始化主键和自增列信息的方式
  227. },
  228. db =>
  229. {
  230. db.Aop.OnLogExecuting = (sql, pars) =>
  231. {
  232. };
  233. });
  234. return sqlSugar;
  235. });
  236. }
  237. protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
  238. {
  239. base.ConfigureModuleCatalog(moduleCatalog);
  240. }
  241. protected override void OnStartup(StartupEventArgs e)
  242. {
  243. OpenCvSharp.Cv2.GetVersionString();
  244. var currentDomain = AppDomain.CurrentDomain;
  245. currentDomain.UnhandledException += UnhandledExceptionOccured;
  246. // 在异常由应用程序引发但未进行处理时发生。主要指的是UI线程。
  247. this.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);
  248. mutex = new System.Threading.Mutex(true, "Team-AAS-VM");
  249. if (mutex.WaitOne(0, false))
  250. {
  251. //var softKey = new SoftKey();
  252. //var ret = softKey.CheckKeyByReadEprom();
  253. //if (ret == 0)
  254. //{
  255. // LogHelper.WriteLogInfo(Lang.AASLicense正常使用);
  256. //}
  257. //else
  258. //{
  259. // LogHelper.WriteLogInfo(Lang.未检测到正确的AASlicenseusb);
  260. // MessageBox.Show(Lang.未检测到正确的AASlicenseusb, "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk);
  261. // this.Shutdown();
  262. // return;
  263. //}
  264. if (Cognex.VisionPro.CogMisc.GetLicensedFeatures(true).Count <= 0)
  265. {
  266. LogHelper.WriteLogInfo(Lang.未检测到正确的VisionProlicense);
  267. MessageBox.Show(Lang.未检测到正确的VisionProlicense, "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk);
  268. this.Shutdown();
  269. return;
  270. }
  271. var culture = new CultureInfo("zh-CN");
  272. App.Current.Dispatcher.Thread.CurrentCulture = culture;
  273. App.Current.Dispatcher.Thread.CurrentUICulture = culture;
  274. LocalizeDictionary.Instance.Culture = culture;
  275. base.OnStartup(e);
  276. LogHelper.WriteLogInfo("<<<=====================Team-AAS-VM Startup=====================");
  277. try
  278. {
  279. if (!RegeditHelper.IsFirstUse())
  280. {
  281. RegeditHelper.WriteFirstLog();
  282. }
  283. RegeditHelper.WriteAppVersion(System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString());
  284. }
  285. catch (Exception ex)
  286. {
  287. LogHelper.WriteLogError(Lang.操作注册表时出错, ex);
  288. }
  289. }
  290. else
  291. {
  292. MessageBox.Show(Lang.程序已经在运行, "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk);
  293. this.Shutdown();
  294. }
  295. }
  296. protected override void OnExit(ExitEventArgs e)
  297. {
  298. LogHelper.WriteLogInfo("=====================Team-AAS-VM End=====================>>>");
  299. base.OnExit(e);
  300. }
  301. void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
  302. {
  303. //可以记录日志并转向错误bug窗口友好提示用户
  304. e.Handled = true;
  305. LogHelper.WriteLogFatal("Application has crashed", e.Exception);
  306. MessageBox.Show("Error:" + e.Exception.Message + " " + e.Exception.StackTrace, "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk);
  307. }
  308. private static void UnhandledExceptionOccured(object sender, UnhandledExceptionEventArgs args)
  309. {
  310. //全局异常记录
  311. var e = (Exception)args.ExceptionObject;
  312. LogHelper.WriteLogFatal("Application has crashed", e);
  313. MessageBox.Show($"Error: something went wrong and the application must close:{e.ToString()} ", "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk);
  314. }
  315. protected override void OnInitialized()
  316. {
  317. base.OnInitialized();
  318. }
  319. }
  320. }