|
|
@@ -6,59 +6,95 @@
|
|
|
|
|
|
| 组件 | 技术方案 |
|
|
|
|------|---------|
|
|
|
-| **UI 框架** | Avalonia UI 11.2.3 |
|
|
|
+| **UI 框架** | Avalonia UI 12.1.1 |
|
|
|
| **运行时** | .NET 8.0 |
|
|
|
-| **MVVM 框架** | CommunityToolkit.Mvvm |
|
|
|
-| **PLC 通信** | HslCommunication |
|
|
|
-| **数据库** | FreeSql + SQLite |
|
|
|
-| **图表** | LiveCharts2 |
|
|
|
-| **日志** | Serilog |
|
|
|
+| **MVVM 框架** | CommunityToolkit.Mvvm 8.4.2 |
|
|
|
+| **PLC 通信** | HslCommunication 12.9.2 |
|
|
|
+| **数据库** | SqlSugar 5.1.4 + SQLite |
|
|
|
+| **图表** | LiveCharts2 2.1.0 |
|
|
|
+| **日志** | Serilog 4.4.0 |
|
|
|
+| **UI 控件库** | Semi.Avalonia 12.1.0 |
|
|
|
+| **报表** | ReportService(HTML 日报/月报) |
|
|
|
+| **中控通信** | WebSocket Hub(Server/Client 模式) |
|
|
|
|
|
|
## 📁 项目结构
|
|
|
|
|
|
```
|
|
|
YZWater3/
|
|
|
├── src/
|
|
|
-│ ├── YZWater.Core/ # 核心业务逻辑(共享)
|
|
|
-│ │ ├── Models/ # 数据模型
|
|
|
+│ ├── YZWater.Core/ # 核心业务逻辑(UI 无关)
|
|
|
+│ │ ├── Models/ # 数据模型(SqlSugar ORM)
|
|
|
│ │ │ ├── Person.cs # 人员模型
|
|
|
│ │ │ ├── AlarmRecord.cs # 报警记录
|
|
|
│ │ │ ├── FlowRecord.cs # 流量记录
|
|
|
+│ │ │ ├── AnalogRecord.cs # 模拟量记录
|
|
|
│ │ │ ├── EquipmentStatus.cs # 设备状态
|
|
|
+│ │ │ ├── AuditLog.cs # 审计日志
|
|
|
+│ │ │ ├── ProjectProfile.cs # 项目档案
|
|
|
│ │ │ └── SystemConfig.cs # 系统配置
|
|
|
-│ │ ├── Services/ # 服务层
|
|
|
-│ │ │ ├── DatabaseService.cs # 数据库服务
|
|
|
-│ │ │ ├── PlcService.cs # PLC 通信服务
|
|
|
-│ │ │ └── ConfigService.cs # 配置服务
|
|
|
+│ │ ├── Services/ # 服务层(单例/静态模式)
|
|
|
+│ │ │ ├── PlcService.cs # PLC 通信(西门子 S7)
|
|
|
+│ │ │ ├── PlcPollingService.cs # PLC 轮询(单例)
|
|
|
+│ │ │ ├── MockPlcService.cs # 模拟 PLC 数据
|
|
|
+│ │ │ ├── AlarmService.cs # 报警服务(单例)
|
|
|
+│ │ │ ├── DataLoggingService.cs # 数据日志
|
|
|
+│ │ │ ├── AuthService.cs # 认证(PBKDF2)
|
|
|
+│ │ │ ├── ConfigService.cs # JSON 配置
|
|
|
+│ │ │ ├── DatabaseService.cs # SqlSugar + SQLite
|
|
|
+│ │ │ ├── HubServer.cs # WebSocket 服务端
|
|
|
+│ │ │ ├── HubClient.cs # WebSocket 客户端
|
|
|
+│ │ │ ├── ReportService.cs # HTML 报表
|
|
|
+│ │ │ ├── BackupService.cs # 数据库备份/还原
|
|
|
+│ │ │ ├── AuditService.cs # 审计日志
|
|
|
+│ │ │ ├── LanguageService.cs # 中/英双语
|
|
|
+│ │ │ ├── ThemeService.cs # 深色/浅色主题
|
|
|
+│ │ │ ├── ProjectService.cs # 多项目管理
|
|
|
+│ │ │ └── LogService.cs # Serilog 初始化
|
|
|
│ │ ├── ViewModels/ # ViewModel 层
|
|
|
-│ │ │ ├── MainViewModel.cs # 主窗口
|
|
|
-│ │ │ ├── ViewAViewModel.cs # 主工艺
|
|
|
-│ │ │ ├── ViewBViewModel.cs # 参数设置
|
|
|
-│ │ │ ├── ViewCViewModel.cs # 流量记录
|
|
|
-│ │ │ ├── ViewDViewModel.cs # 报警记录
|
|
|
-│ │ │ └── ViewEViewModel.cs # 关于
|
|
|
+│ │ │ ├── MainViewModel.cs # 主窗口(Tab 导航)
|
|
|
+│ │ │ ├── LoginViewModel.cs # 登录
|
|
|
+│ │ │ ├── ViewAViewModel.cs # 主工艺(接 PLC 实时数据)
|
|
|
+│ │ │ ├── ViewBViewModel.cs # 参数设置
|
|
|
+│ │ │ ├── ViewCViewModel.cs # 流量记录(图表+导出)
|
|
|
+│ │ │ ├── ViewDViewModel.cs # 报警记录
|
|
|
+│ │ │ ├── ViewEViewModel.cs # 关于
|
|
|
+│ │ │ ├── ViewFViewModel.cs # 审计日志
|
|
|
+│ │ │ └── ProjectViewModel.cs # 项目档案
|
|
|
│ │ └── Utils/ # 工具类
|
|
|
-│ │ ├── Nlogger.cs # 日志工具
|
|
|
-│ │ └── WinSize.cs # 窗口尺寸工具
|
|
|
+│ │ ├── ResolutionManager.cs # 分辨率管理
|
|
|
+│ │ └── WinSize.cs # 窗口尺寸
|
|
|
│ │
|
|
|
│ └── YZWater.Avalonia/ # Avalonia UI 项目
|
|
|
-│ ├── Views/ # XAML 视图
|
|
|
-│ │ ├── MainWindow.axaml # 主窗口
|
|
|
-│ │ ├── ViewAView.axaml # 主工艺视图(工业控件)
|
|
|
-│ │ ├── ViewBView.axaml # 参数设置视图
|
|
|
-│ │ ├── ViewCView.axaml # 流量记录视图
|
|
|
-│ │ ├── ViewDView.axaml # 报警记录视图
|
|
|
-│ │ └── ViewEView.axaml # 关于视图
|
|
|
-│ ├── Controls/ # 自定义工业控件
|
|
|
-│ │ ├── WaterTankControl.cs # 水箱控件
|
|
|
-│ │ ├── PumpControl.cs # 泵控件
|
|
|
-│ │ ├── FanControl.cs # 风扇控件
|
|
|
-│ │ ├── PipeLineControl.cs # 管道控件
|
|
|
-│ │ └── ValveControl.cs # 阀门控件
|
|
|
+│ ├── Views/ # AXAML 视图
|
|
|
+│ │ ├── MainWindow.axaml # 主窗口
|
|
|
+│ │ ├── LoginView.axaml # 登录窗口
|
|
|
+│ │ ├── ViewAView.axaml # 主工艺(工业控件)
|
|
|
+│ │ ├── ViewBView.axaml # 参数设置
|
|
|
+│ │ ├── ViewCView.axaml # 流量记录
|
|
|
+│ │ ├── ViewDView.axaml # 报警记录
|
|
|
+│ │ ├── ViewEView.axaml # 关于
|
|
|
+│ │ ├── ViewFView.axaml # 审计日志
|
|
|
+│ │ └── ProjectView.axaml # 项目档案
|
|
|
+│ ├── Controls/ # 自定义工业控件(Render 绘制)
|
|
|
+│ │ ├── WaterTankControl.cs # 水箱液位
|
|
|
+│ │ ├── PumpControl.cs # 泵(旋转动画)
|
|
|
+│ │ ├── FanControl.cs # 风扇(旋转动画)
|
|
|
+│ │ ├── PipeLineControl.cs # 管道(流动虚线)
|
|
|
+│ │ ├── ValveControl.cs # 阀门(三态)
|
|
|
+│ │ ├── GaugeControl.cs # 仪表
|
|
|
+│ │ ├── StatusCard.cs # 状态卡片
|
|
|
+│ │ └── PumpStation3DControl.cs # 泵站 3D 视图
|
|
|
+│ ├── Themes/ # 深色/浅色主题
|
|
|
+│ │ ├── IndustrialTheme.axaml
|
|
|
+│ │ ├── IndustrialThemeLight.axaml
|
|
|
+│ │ └── IndustrialStyles.axaml
|
|
|
│ ├── Converters/ # 值转换器
|
|
|
│ └── Assets/ # 资源文件
|
|
|
│
|
|
|
-└── YZWater3.sln # 解决方案文件
|
|
|
+├── tests/
|
|
|
+│ └── YZWater.Core.Tests/ # xUnit 单元测试
|
|
|
+├── docs/ # 文档
|
|
|
+└── YZWater3.sln # 解决方案
|
|
|
```
|
|
|
|
|
|
## 🛠️ 开发环境
|
|
|
@@ -94,6 +130,21 @@ YZWater3/
|
|
|
|
|
|
## 🎯 功能特性
|
|
|
|
|
|
+### 登录认证
|
|
|
+- 用户名/密码登录(PBKDF2-SHA256 哈希)
|
|
|
+- 4 种角色权限:Viewer / Operator / Engineer / Admin
|
|
|
+- 30 分钟会话超时自动登出
|
|
|
+- 审计日志记录所有登录/登出操作
|
|
|
+
|
|
|
+### 运行模式(通过 `yzwater-config.json` → `RunMode` 配置)
|
|
|
+
|
|
|
+| 模式 | 说明 |
|
|
|
+|------|------|
|
|
|
+| `Direct` | 直连 PLC(默认) |
|
|
|
+| `Server` | 连 PLC + 启动 WebSocket 服务端(端口 8765) |
|
|
|
+| `Client` | 连接 WebSocket 服务端接收数据,不直连 PLC |
|
|
|
+| `Mock` | 无 PLC 时使用模拟数据 |
|
|
|
+
|
|
|
### 主工艺视图 (ViewA)
|
|
|
- **工业控件展示** - 使用自定义控件模拟真实工业界面
|
|
|
- WaterTankControl - 水箱液位显示
|
|
|
@@ -131,6 +182,16 @@ YZWater3/
|
|
|
- 公司信息
|
|
|
- 版本信息
|
|
|
|
|
|
+### 审计日志 (ViewF)
|
|
|
+- 操作审计记录列表
|
|
|
+- 按用户、操作类型筛选
|
|
|
+- 登录/登出/配置变更追踪
|
|
|
+
|
|
|
+### 项目管理 (ProjectView)
|
|
|
+- 多项目档案管理
|
|
|
+- 项目切换
|
|
|
+- 项目级配置独立存储
|
|
|
+
|
|
|
## 🔧 配置说明
|
|
|
|
|
|
### PLC 配置
|
|
|
@@ -145,42 +206,56 @@ YZWater3/
|
|
|
"LevelHighAlarm": 80.0,
|
|
|
"LevelLowAlarm": 20.0,
|
|
|
"FlowHighAlarm": 100.0,
|
|
|
+ "FlowLowAlarm": 0.0,
|
|
|
"PumpFrequency": 50.0,
|
|
|
"SystemName": "污水处理监控系统",
|
|
|
"CompanyName": "扬州旭轩科技有限公司",
|
|
|
"ContactPerson": "赵经理",
|
|
|
- "ContactPhone": "18115099090"
|
|
|
+ "ContactPhone": "18115099090",
|
|
|
+ "RunMode": "Direct",
|
|
|
+ "HubPort": 8765,
|
|
|
+ "HubServerUrl": "",
|
|
|
+ "HubToken": "",
|
|
|
+ "IsDarkTheme": false,
|
|
|
+ "IsChinese": true,
|
|
|
+ "PlcAddresses": {}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
### 数据库配置
|
|
|
|
|
|
-数据库文件:`yzwater.db`(SQLite)
|
|
|
+数据库文件:`yzwater.db`(SQLite,SqlSugar ORM)
|
|
|
|
|
|
自动创建以下表:
|
|
|
+- `users` - 用户表(含角色、密码哈希、盐值)
|
|
|
- `persons` - 人员表
|
|
|
- `alarm_records` - 报警记录表
|
|
|
- `flow_records` - 流量记录表
|
|
|
-- `system_config` - 系统配置表
|
|
|
+- `analog_records` - 模拟量记录表
|
|
|
+- `equipment_statuses` - 设备状态表
|
|
|
+- `audit_logs` - 审计日志表
|
|
|
|
|
|
## 📦 依赖包
|
|
|
|
|
|
### Core 项目
|
|
|
-- CommunityToolkit.Mvvm 8.2.2
|
|
|
-- FreeSql.Provider.Sqlite 3.2.800
|
|
|
-- FreeSql.Repository 3.2.800
|
|
|
-- HslCommunication 12.0.1
|
|
|
-- Serilog 4.0.2
|
|
|
-- Serilog.Sinks.Console 6.0.0
|
|
|
-- Serilog.Sinks.File 6.0.0
|
|
|
+- CommunityToolkit.Mvvm 8.4.2
|
|
|
+- SqlSugarCore 5.1.4.217
|
|
|
+- HslCommunication 12.9.2
|
|
|
+- Serilog 4.4.0
|
|
|
+- Serilog.Sinks.Console 6.1.1
|
|
|
+- Serilog.Sinks.File 7.0.0
|
|
|
+- SkiaSharp 4.151.1
|
|
|
+- Quartz 3.20.0
|
|
|
+- Stateless 5.20.1
|
|
|
|
|
|
### Avalonia 项目
|
|
|
-- Avalonia 11.2.3
|
|
|
-- Avalonia.Desktop 11.2.3
|
|
|
-- Avalonia.Themes.Fluent 11.2.3
|
|
|
-- Avalonia.Fonts.Inter 11.2.3
|
|
|
-- LiveChartsCore.SkiaSharpView.Avalonia 2.0.0-rc4.5
|
|
|
-- Semi.Avalonia 11.2.1.4
|
|
|
+- Avalonia 12.1.1
|
|
|
+- Avalonia.Desktop 12.1.1
|
|
|
+- Avalonia.Themes.Fluent 12.1.1
|
|
|
+- Avalonia.Fonts.Inter 12.1.1
|
|
|
+- Avalonia.Controls.DataGrid 12.1.2
|
|
|
+- LiveChartsCore.SkiaSharpView.Avalonia 2.1.0-dev-798
|
|
|
+- Semi.Avalonia 12.1.0.1
|
|
|
|
|
|
## 📐 解析度自适应
|
|
|
|
|
|
@@ -286,7 +361,7 @@ var fontSize = ResolutionManager.Instance.ScaleFontSize(14);
|
|
|
| 特性 | YZWater2 (WPF) | YZWater3 (Avalonia) |
|
|
|
|------|---------------|---------------------|
|
|
|
| **跨平台** | ❌ 仅 Windows | ✅ Windows/Linux/macOS |
|
|
|
-| **UI 框架** | WPF | Avalonia UI 11 |
|
|
|
+| **UI 框架** | WPF | Avalonia UI 12 |
|
|
|
| **运行时** | .NET Framework 4.8 | .NET 8.0 |
|
|
|
| **MVVM** | Caliburn.Micro | CommunityToolkit.Mvvm |
|
|
|
| **图表** | LiveCharts.Wpf | LiveCharts2 |
|
|
|
@@ -345,7 +420,7 @@ public partial class MyViewModel : ObservableObject
|
|
|
|
|
|
## 📄 许可证
|
|
|
|
|
|
-© 2024 扬州旭轩科技有限公司
|
|
|
+© 2024-2026 扬州旭轩科技有限公司
|
|
|
|
|
|
## 👥 联系方式
|
|
|
|