diff --git a/BOB/App.xaml.cs b/BOB/App.xaml.cs index 228538a..5563313 100644 --- a/BOB/App.xaml.cs +++ b/BOB/App.xaml.cs @@ -6,9 +6,13 @@ using BOB.ViewModels.Dialogs; using BOB.Views; using BOB.Views.Dialogs; using Castle.DynamicProxy; +using Model.SQLModel; +using ORM; +using Service.Implement; using System.Configuration; using System.Data; using System.Diagnostics; +using System.IO; using System.Reflection; using System.Windows; using static System.Runtime.InteropServices.JavaScript.JSType; @@ -30,15 +34,60 @@ namespace BOB { string deviceName = e.Args[0]; SystemConfig.Instance.Title = deviceName; + InitDataBase(deviceName); //Debugger.Launch(); } else { SystemConfig.Instance.Title = "设备2";//模拟打开的设备 + InitDataBase("设备2"); } base.OnStartup(e); } + private void InitDataBase(string deviceName) + { + int tenantId = 0; + string dbFileName; + switch (deviceName) + { + case "设备1": + tenantId = 10001; + dbFileName = "设备1.db"; + break; + case "设备2": + tenantId = 10002; + dbFileName = "设备2.db"; + break; + case "设备3": + tenantId = 10003; + dbFileName = "设备3.db"; + break; + case "水冷机和环境箱": + tenantId = 10004; + dbFileName = "水冷机和环境箱.db"; + break; + default: + throw new Exception("未知设备"); + } + + // 设置租户 ID,初始化雪花 ID WorkId/DatacenterId + DatabaseConfig.SetTenant(tenantId); + + // 设置数据库路径 + string baseDir = AppDomain.CurrentDomain.BaseDirectory; + string folder = Path.Combine(baseDir, "SQLDB"); + if (!Directory.Exists(folder)) + Directory.CreateDirectory(folder); + string dbPath = Path.Combine(folder, dbFileName); + DatabaseConfig.SetDbConnection($"Data Source={dbPath}"); + + // 创建数据库文件并检查连接 + DatabaseConfig.CreateDatabaseAndCheckConnection(createDatabase: true, checkConnection: true); + SqlSugarContext.DbContext.CodeFirst.InitTables(typeof(BackFeedData), typeof(EAELD9080Data), typeof(IT6724CData),typeof(PSB1100Data)); + } + + protected override void OnInitialized() { base.OnInitialized(); @@ -64,15 +113,26 @@ namespace BOB containerRegistry.RegisterDialog("SQ0030G1D"); containerRegistry.RegisterDialog("WS_68030_380T"); containerRegistry.RegisterDialog("ZXKS"); - //注册全局变量 + //注册全局单例变量 containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); - containerRegistry.RegisterSingleton(); + containerRegistry.RegisterSingleton(); + // 注册仓储 + containerRegistry.RegisterScoped(typeof(SqlSugarRepository<>)); + // 注册服务 + containerRegistry.RegisterScoped(typeof(BackFeedService)); + containerRegistry.RegisterScoped(typeof(EAEL9080Service)); + containerRegistry.RegisterScoped(typeof(IT6724CService)); + containerRegistry.RegisterScoped(typeof(LQ7500DService)); + containerRegistry.RegisterScoped(typeof(PSB11000Service)); + containerRegistry.RegisterScoped(typeof(SQ0030Service)); + containerRegistry.RegisterScoped(typeof(WS680Service)); + containerRegistry.RegisterScoped(typeof(ZXKXService)); } protected override void OnExit(ExitEventArgs e) { - //var devices = Container.Resolve(); - //devices.Dispose(); + var devices = Container.Resolve(); + devices.Dispose(); base.OnExit(e); } } diff --git a/BOB/Services/BackfeedPollingRead.cs b/BOB/Services/BackfeedPollingRead.cs index f559862..8792b67 100644 --- a/BOB/Services/BackfeedPollingRead.cs +++ b/BOB/Services/BackfeedPollingRead.cs @@ -1,6 +1,10 @@ using BOB.Singleton; using Common.PubEvent; using DeviceCommand.Device; +using Logger; +using Model.SQLModel; +using Service.Implement; +using Service.Interface; using System; using System.CodeDom; using System.Collections.Generic; @@ -14,9 +18,11 @@ namespace BOB.Services { private Backfeed _Backfeed { get;set; } private IEventAggregator _eventAggregator { get;set; } + private IBaseService _backFeedService { get;set; } public BackfeedPollingRead(IContainerProvider containerProvider) : base(containerProvider) { _eventAggregator = containerProvider.Resolve(); + _backFeedService=containerProvider.Resolve(); var _devices = containerProvider.Resolve(); DeviceName = "Backfeed"; _Backfeed = _devices.DeviceDic["Backfeed"]as Backfeed; @@ -33,14 +39,27 @@ namespace BOB.Services //实时电流 =await _Backfeed!.查询实时电流(ct); //实时电压 = await _Backfeed!.查询实时电压(ct); //实时功率 = await _Backfeed!.查询实时功率(ct); - var datalist = new List() { 实时电流, 实时电压, 实时功率 }; - var dataDic = new Dictionary + var reuslt= await _backFeedService.InsertAsync(new BackFeedData + { + RealTimeCurrent = 实时电流, + RealTimePower= 实时电压, + RealTimeVoltage= 实时功率, + CollectTime=DateTime.Now + }); + if (reuslt.IsSuccess) + { + var dataDic = new Dictionary { { "实时电流", 实时电流 }, { "实时电压", 实时电压 }, { "实时功率", 实时功率 } }; - _eventAggregator.GetEvent().Publish(("Backfeed", dataDic)); + _eventAggregator.GetEvent().Publish(("Backfeed", dataDic)); + } + else + { + LoggerHelper.ErrorWithNotify(reuslt.Msg); + } } } } diff --git a/BOB/Services/EAEL9080PollingRead.cs b/BOB/Services/EAEL9080PollingRead.cs index 52eb91d..f6a9b4b 100644 --- a/BOB/Services/EAEL9080PollingRead.cs +++ b/BOB/Services/EAEL9080PollingRead.cs @@ -1,6 +1,10 @@ using BOB.Singleton; using Common.PubEvent; using DeviceCommand.Device; +using Logger; +using Model.SQLModel; +using Service.Implement; +using Service.Interface; using System; using System.Collections.Generic; using System.Linq; @@ -13,10 +17,12 @@ namespace BOB.Services { private EAEL9080 _EAEL9080 { get; set; } private IEventAggregator _eventAggregator { get; set; } + private IBaseService _eAEL9080Service { get; set; } public EAEL9080PollingRead(IContainerProvider containerProvider) : base(containerProvider) { _eventAggregator = containerProvider.Resolve(); var _devices = containerProvider.Resolve(); + _eAEL9080Service = containerProvider.Resolve(); DeviceName = "EAEL9080"; _EAEL9080 = _devices.DeviceDic["EAEL9080"] as EAEL9080; } @@ -31,13 +37,28 @@ namespace BOB.Services //实时电流 = await _EAEL9080!.查询电流(ct); //实时电压 = await _EAEL9080!.查询电压(ct); //实时功率 = await _EAEL9080!.查询功率(ct); - var dataDic = new Dictionary + var reuslt = await _eAEL9080Service.InsertAsync(new EAELD9080Data + { + RealTimeCurrent = 实时电流, + RealTimePower = 实时电压, + RealTimeVoltage = 实时功率, + CollectTime = DateTime.Now + }); + if (reuslt.IsSuccess) + { + var dataDic = new Dictionary { { "实时电流", 实时电流 }, { "实时电压", 实时电压 }, { "实时功率", 实时功率 } }; - _eventAggregator.GetEvent().Publish(("EAEL9080", dataDic)); + _eventAggregator.GetEvent().Publish(("EAEL9080", dataDic)); + } + else + { + LoggerHelper.ErrorWithNotify(reuslt.Msg); + } + } } } diff --git a/BOB/Services/IT6724CPollingRead.cs b/BOB/Services/IT6724CPollingRead.cs index 403e951..16e0114 100644 --- a/BOB/Services/IT6724CPollingRead.cs +++ b/BOB/Services/IT6724CPollingRead.cs @@ -1,6 +1,10 @@ using BOB.Singleton; using Common.PubEvent; using DeviceCommand.Device; +using Logger; +using Model.SQLModel; +using Service.Implement; +using Service.Interface; using System; using System.Collections.Generic; using System.Linq; @@ -13,10 +17,12 @@ namespace BOB.Services { private IT6724C _IT6724C { get; set; } private IEventAggregator _eventAggregator { get; set; } + private IBaseService _iT6724CService { get; set; } public IT6724CPollingRead(IContainerProvider containerProvider) : base(containerProvider) { _eventAggregator = containerProvider.Resolve(); var _devices = containerProvider.Resolve(); + _iT6724CService = containerProvider.Resolve(); DeviceName = "Backfeed"; _IT6724C = _devices.DeviceDic["IT6724C"] as IT6724C; } @@ -31,13 +37,27 @@ namespace BOB.Services //实时电流 = await _IT6724C!.查询实时电流(ct); //实时电压 = await _IT6724C!.查询实时电压(ct); //实时功率 = await _IT6724C!.查询实时功率(ct); - var dataDic = new Dictionary + var reuslt = await _iT6724CService.InsertAsync(new IT6724CData + { + RealTimeCurrent = 实时电流, + RealTimePower = 实时电压, + RealTimeVoltage = 实时功率, + CollectTime = DateTime.Now + }); + if (reuslt.IsSuccess) + { + var dataDic = new Dictionary { { "实时电流", 实时电流 }, { "实时电压", 实时电压 }, { "实时功率", 实时功率 } }; - _eventAggregator.GetEvent().Publish(("IT6724C", dataDic)); + _eventAggregator.GetEvent().Publish(("IT6724C", dataDic)); + } + else + { + LoggerHelper.ErrorWithNotify(reuslt.Msg); + } } } } diff --git a/BOB/Services/PSB11000PollingRead.cs b/BOB/Services/PSB11000PollingRead.cs index 5004991..d085f1e 100644 --- a/BOB/Services/PSB11000PollingRead.cs +++ b/BOB/Services/PSB11000PollingRead.cs @@ -1,6 +1,10 @@ using BOB.Singleton; using Common.PubEvent; using DeviceCommand.Device; +using Logger; +using Model.SQLModel; +using Service.Implement; +using Service.Interface; using System; using System.Collections.Generic; using System.Linq; @@ -13,10 +17,12 @@ namespace BOB.Services { private PSB11000 _PSB11000 { get; set; } private IEventAggregator _eventAggregator { get; set; } + private IBaseService _pSB1100Service { get; set; } public PSB11000PollingRead(IContainerProvider containerProvider) : base(containerProvider) { _eventAggregator = containerProvider.Resolve(); var _devices = containerProvider.Resolve(); + _pSB1100Service = containerProvider.Resolve(); DeviceName = "PSB11000"; _PSB11000 = _devices.DeviceDic["PSB11000"] as PSB11000; } @@ -33,14 +39,27 @@ namespace BOB.Services //实时电流 = await _PSB11000!.查询电流(ct); //实时电压 = await _PSB11000!.查询电压(ct); //实时功率 = await _PSB11000!.查询功率(ct); - var datalist = new List() { 实时电流, 实时电压, 实时功率 }; - var dataDic = new Dictionary + var reuslt = await _pSB1100Service.InsertAsync(new PSB1100Data + { + RealTimeCurrent = 实时电流, + RealTimePower = 实时电压, + RealTimeVoltage = 实时功率, + CollectTime = DateTime.Now + }); + if (reuslt.IsSuccess) + { + var dataDic = new Dictionary { { "实时电流", 实时电流 }, { "实时电压", 实时电压 }, { "实时功率", 实时功率 } }; - _eventAggregator.GetEvent().Publish(("PSB11000", dataDic)); + _eventAggregator.GetEvent().Publish(("PSB11000", dataDic)); + } + else + { + LoggerHelper.ErrorWithNotify(reuslt.Msg); + } } } } diff --git a/BOB/ViewModels/DataViewModel.cs b/BOB/ViewModels/DataViewModel.cs index 3783d67..bb97685 100644 --- a/BOB/ViewModels/DataViewModel.cs +++ b/BOB/ViewModels/DataViewModel.cs @@ -1,9 +1,18 @@ using BOB.Singleton; +using Common.PubEvent; +using Logger; +using Model.SQLModel; +using Prism.Commands; +using Prism.Mvvm; +using Service.Implement; +using Service.Interface; +using SqlSugar; using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; -using System.Text; using System.Threading.Tasks; +using System.Windows.Input; namespace BOB.ViewModels { @@ -11,38 +20,341 @@ namespace BOB.ViewModels { #region 属性 + private int _currentPage = 1; + public int CurrentPage + { + get => _currentPage; + set => SetProperty(ref _currentPage, value); + } + + private RefAsync _totalPages=new RefAsync(0); + public RefAsync TotalPages + { + get => _totalPages; + set => SetProperty(ref _totalPages, value); + } + private int _UITotalPages; + public int UITotalPages + { + get => _UITotalPages; + set => SetProperty(ref _UITotalPages, value); + } + + private List _dataTableList; + public List DataTableList + { + get => _dataTableList; + set => SetProperty(ref _dataTableList, value); + } + private string _SelectTable; + public string SelectTable + { + get => _SelectTable; + set + { + if (SetProperty(ref _SelectTable, value)) + { + + } + } + } + private List _BackFeedDataList; + public List BackFeedDataList + { + get => _BackFeedDataList; + set => SetProperty(ref _BackFeedDataList, value); + } + private List _EAELD9080DataList; + public List EAELD9080DataList + { + get => _EAELD9080DataList; + set => SetProperty(ref _EAELD9080DataList, value); + } + private List _PSB1100DataList; + public List PSB1100DataList + { + get => _PSB1100DataList; + set => SetProperty(ref _PSB1100DataList, value); + } + private List _IT6724CDataList; + public List IT6724CDataList + { + get => _IT6724CDataList; + set => SetProperty(ref _IT6724CDataList, value); + } + private DateTime? _startDate; + public DateTime? StartDate + { + get => _startDate; + set => SetProperty(ref _startDate, value); + } + + private DateTime? _endDate; + public DateTime? EndDate + { + get => _endDate; + set => SetProperty(ref _endDate, value); + } + private ObservableCollection _currentDataSource; + public ObservableCollection CurrentDataSource + { + get => _currentDataSource; + set => SetProperty(ref _currentDataSource, value); + } #endregion + #region 命令 + public ICommand FirstPageCommand { get; private set; } + public ICommand PreviousPageCommand { get; private set; } + public ICommand NextPageCommand { get; private set; } + public ICommand LastPageCommand { get; private set; } + public ICommand LoadCommand { get; private set; } + public ICommand QueryCommand { get; private set; } + public ICommand RefreshCommand { get; private set; } + public ICommand SelectTableCommand { get; private set; } #endregion + private IEventAggregator _eventAggregator; private IDialogService _dialogService; private Devices _devices { get; set; } - public DataViewModel(IEventAggregator eventAggregator, IDialogService dialogService, IContainerProvider containerProvider) + private IBaseService _backFeedService { get; set; } + private IBaseService _eAELD9080Service { get; set; } + private IBaseService _pSB1100Service { get; set; } + private IBaseService _iT6724CService { get; set; } + + public DataViewModel(IContainerProvider containerProvider) { - _dialogService = dialogService; - _eventAggregator = eventAggregator; + _eventAggregator = containerProvider.Resolve(); + _dialogService = containerProvider.Resolve(); _devices = containerProvider.Resolve(); - + _backFeedService= containerProvider.Resolve(); + _eAELD9080Service = containerProvider.Resolve(); + _pSB1100Service = containerProvider.Resolve(); + _iT6724CService = containerProvider.Resolve(); + FirstPageCommand = new AsyncDelegateCommand(GoToFirstPage); + PreviousPageCommand = new AsyncDelegateCommand(GoToPreviousPage); + NextPageCommand = new AsyncDelegateCommand(GoToNextPage); + LastPageCommand = new AsyncDelegateCommand(GoToLastPage); + LoadCommand = new AsyncDelegateCommand(Load); + QueryCommand = new AsyncDelegateCommand(Query); + RefreshCommand = new AsyncDelegateCommand(Refresh); + SelectTableCommand = new AsyncDelegateCommand(OnSelectTable); + DataTableList = new List { "BackFeedData", "EAELD9080Data", "IT6724CData", "PSB1100Data"}; } - #region 导航 - public void OnNavigatedTo(NavigationContext navigationContext) + + private async Task OnSelectTable() { - + switch (SelectTable) + { + case "BackFeedData": + CurrentDataSource = new ObservableCollection(BackFeedDataList); + break; + case "EAELD9080Data": + CurrentDataSource = new ObservableCollection(EAELD9080DataList); + break; + case "PSB1100Data": + CurrentDataSource = new ObservableCollection(PSB1100DataList); + break; + case "IT6724CData": + CurrentDataSource = new ObservableCollection(IT6724CDataList); + break; + default: + CurrentDataSource = new ObservableCollection(); + break; + } + GoToFirstPage(); } + private DateTime? QueryStartTime; + private DateTime? QueryEndTime; + private bool DataQuery=false; + private async Task Refresh() + { + DataQuery = false; + QueryStartTime = null; + QueryEndTime = null; + await GoToFirstPage(); + } + + private async Task Query() + { + if (!StartDate.HasValue || !EndDate.HasValue) + { + return; + } + DateTime endDateWithTime = EndDate.Value.AddDays(1); + if (StartDate.Value < endDateWithTime) + { + QueryStartTime = StartDate; + QueryEndTime = endDateWithTime; + DataQuery = true; + await GoToFirstPage(); + } + else + { + return; + } + } + + + private async Task Load() + { + var backFeedResult = await _backFeedService.GetAllAsync(); + if (backFeedResult.IsSuccess) + { + BackFeedDataList = backFeedResult.Data; + } + else + { + LoggerHelper.ErrorWithNotify("加载 BackFeed 数据失败"); + } + + var eaELD9080Result = await _eAELD9080Service.GetAllAsync(); + if (eaELD9080Result.IsSuccess) + { + EAELD9080DataList = eaELD9080Result.Data; + } + else + { + LoggerHelper.ErrorWithNotify("加载 EAELD9080 数据失败"); + } + + var pSB1100Result = await _pSB1100Service.GetAllAsync(); + if (pSB1100Result.IsSuccess) + { + PSB1100DataList = pSB1100Result.Data; + } + else + { + LoggerHelper.ErrorWithNotify("加载 PSB1100 数据失败"); + } + + var it6724CResult = await _iT6724CService.GetAllAsync(); + if (it6724CResult.IsSuccess) + { + IT6724CDataList = it6724CResult.Data; + } + else + { + LoggerHelper.ErrorWithNotify("加载 IT6724C 数据失败"); + } + } + private async Task GoToFirstPage() + { + CurrentPage = 1; + await LoadPageData(CurrentPage); + } + + private async Task GoToPreviousPage() + { + if (CurrentPage > 1) + { + CurrentPage--; + await LoadPageData(CurrentPage); + } + } + + private async Task GoToNextPage() + { + if (CurrentPage < TotalPages) + { + CurrentPage++; + await LoadPageData(CurrentPage); + } + } + + private async Task GoToLastPage() + { + CurrentPage = TotalPages; + await LoadPageData(CurrentPage); + } + + private int PageSize=20; + private async Task LoadPageData(int currentPage) + { + switch (SelectTable) + { + case "BackFeedData": + if (DataQuery) // 如果启用日期查询 + { + var result = await _backFeedService.GetPagedAsync(currentPage, PageSize, TotalPages, QueryStartTime, QueryEndTime); + if (result.IsSuccess) + CurrentDataSource = new ObservableCollection(result.Data); + } + else + { + var result = await _backFeedService.GetPagedAsync(currentPage, PageSize, TotalPages); + if (result.IsSuccess) + CurrentDataSource = new ObservableCollection(result.Data); + } + break; + + case "EAELD9080Data": + if (DataQuery) + { + var result = await _eAELD9080Service.GetPagedAsync(currentPage, PageSize, TotalPages, QueryStartTime, QueryEndTime); + if (result.IsSuccess) + CurrentDataSource = new ObservableCollection(result.Data); + } + else + { + var result = await _eAELD9080Service.GetPagedAsync(currentPage, PageSize, TotalPages); + if (result.IsSuccess) + CurrentDataSource = new ObservableCollection(result.Data); + } + break; + + case "PSB1100Data": + if (DataQuery) + { + var result = await _pSB1100Service.GetPagedAsync(currentPage, PageSize, TotalPages, QueryStartTime, QueryEndTime); + if (result.IsSuccess) + CurrentDataSource = new ObservableCollection(result.Data); + } + else + { + var result = await _pSB1100Service.GetPagedAsync(currentPage, PageSize, TotalPages); + if (result.IsSuccess) + CurrentDataSource = new ObservableCollection(result.Data); + } + break; + + case "IT6724CData": + if (DataQuery) + { + var result = await _iT6724CService.GetPagedAsync(currentPage, PageSize, TotalPages, QueryStartTime, QueryEndTime); + if (result.IsSuccess) + CurrentDataSource = new ObservableCollection(result.Data); + } + else + { + var result = await _iT6724CService.GetPagedAsync(currentPage, PageSize, TotalPages); + if (result.IsSuccess) + CurrentDataSource = new ObservableCollection(result.Data); + } + break; + + default: + CurrentDataSource = new ObservableCollection(); + break; + } + + UITotalPages = TotalPages.Value; + } + + #region 导航 + + public void OnNavigatedTo(NavigationContext navigationContext) { } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } - public void OnNavigatedFrom(NavigationContext navigationContext) - { + public void OnNavigatedFrom(NavigationContext navigationContext) { } - } #endregion } - } diff --git a/BOB/ViewModels/LogAreaViewModel.cs b/BOB/ViewModels/LogAreaViewModel.cs index b5ddc0a..21293e4 100644 --- a/BOB/ViewModels/LogAreaViewModel.cs +++ b/BOB/ViewModels/LogAreaViewModel.cs @@ -32,59 +32,8 @@ namespace BOB.ViewModels var brush = (Brush)new BrushConverter().ConvertFromString(log.color); Logs.Add(new LogItem(log.message, brush, log.depth)); }); - //ShowDeviesInfo(); } - //private void ShowDeviesInfo() - //{ - // foreach (var kv in devices.DeviceDic) - // { - // string name = kv.Key; - // object dev = kv.Value; - - // if (dev == null) - // { - // LoggerHelper.InfoWithNotify($"{name} 实例为空", 0); - // continue; - // } - - // string typeName = dev.GetType().Name; - // string status = GetDeviceConnectionStatus(dev); - - // LoggerHelper.InfoWithNotify( - // $"设备:{name} | 类型:{typeName} | {status}", 0); - // } - //} - //private string GetDeviceConnectionStatus(object device) - //{ - // // 串口设备 - // var serialField = device.GetType().GetProperty("_SerialPort", - // BindingFlags.Public | BindingFlags.Instance); - - // if (serialField != null) - // { - // var serial = serialField.GetValue(device) as System.IO.Ports.SerialPort; - // if (serial == null) - // return "串口未初始化"; - // return serial.IsOpen ? "串口已连接" : "串口未连接"; - // } - - // // TCP 设备 - // var tcpProperty = device.GetType().GetProperty( - // "TcpClient", - // BindingFlags.Public | BindingFlags.Instance - // ); - - // if (tcpProperty != null) - // { - // var client = tcpProperty.GetValue(device) as System.Net.Sockets.TcpClient; - // if (client == null) - // return "TCP 未初始化"; - // return client.Connected ? "TCP 已连接" : "TCP 未连接"; - // } - - // return "无法识别设备类型"; - //} private void ClearLog() diff --git a/BOB/Views/DataView.xaml b/BOB/Views/DataView.xaml index f6e133b..35b5787 100644 --- a/BOB/Views/DataView.xaml +++ b/BOB/Views/DataView.xaml @@ -6,55 +6,124 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:vs="clr-namespace:BOB.Views" xmlns:oxy="http://oxyplot.org/wpf" + xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" mc:Ignorable="d" xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True" d:DesignHeight="1080" d:DesignWidth="1920"> + + + + + - - - + - - -