docs: 更新项目架构与数据模型文档
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,68 +1,149 @@
|
||||
# Architecture: Gpulse.WCT.DataAnalyzer
|
||||
|
||||
> 无线充电 FOD(异物检测)日志数据采集系统,从日志文件中解析 Qfod 和 Ploss 数据并存储到数据库
|
||||
> 无线充电参数采集系统。从 log 文件解析 Qfod/Ploss 数据 → 本地分析库 → 汇总生成正式充电参数数据库 → 导出 CSV。
|
||||
|
||||
---
|
||||
|
||||
## 数据流
|
||||
|
||||
```text
|
||||
log 文件
|
||||
→ parse
|
||||
→ local.db(本地解析库)
|
||||
→ aggregate
|
||||
→ release.db(正式发布库)
|
||||
→ export
|
||||
→ WCT-ChargingParameterDatabase.csv
|
||||
```
|
||||
|
||||
| 阶段 | 命令 | 存储 | 说明 |
|
||||
|------|------|------|------|
|
||||
| 解析 | `parse` | `local.db` | 本地日志解析库,保存原始 Qfod/Ploss 记录 |
|
||||
| 汇总 | `aggregate` | `release.db` | 从 local.db 汇总生成正式充电参数记录 |
|
||||
| 导出 | `export` | CSV | 读取 release.db,输出固定格式 CSV |
|
||||
|
||||
## 文档索引
|
||||
|
||||
| 文档 | 说明 |
|
||||
|------|------|
|
||||
| [技术选型](./技术选型.md) | 技术栈总览、决策记录 |
|
||||
| [模块划分](./模块划分.md) | 模块总览、分层架构、依赖关系 |
|
||||
| [安全架构](./安全架构.md) | 认证方案、数据安全 |
|
||||
| [解析器设计](./parser/概览.md) | Qfod/Ploss 解析器详细设计 |
|
||||
| [数据处理流程](./数据处理流程.md) | 解析流程、批量写入、错误处理 |
|
||||
| [配置管理](./配置管理.md) | 配置文件、配置类定义 |
|
||||
| [CLI 命令设计](./CLI命令设计.md) | 命令行接口定义 |
|
||||
| [数据库切换支持](./database/概览.md) | SQLite/PostgreSQL 切换方案 |
|
||||
| [技术选型](./技术选型.md) | 技术栈、决策记录 |
|
||||
| [模块划分](./模块划分.md) | 分层架构、目录结构、模块职责 |
|
||||
| [数据处理流程](./数据处理流程.md) | 解析→汇总→导出完整流程 |
|
||||
| [CLI 命令设计](./CLI命令设计.md) | 命令行接口 |
|
||||
| [配置管理](./配置管理.md) | 配置结构与双数据库配置 |
|
||||
| [数据库支持](./database/概览.md) | 本地/发布双数据库架构 |
|
||||
| [安全架构](./安全架构.md) | 路径校验、安全策略 |
|
||||
| [解析器设计](./parser/概览.md) | Qfod/Ploss 解析器 |
|
||||
|
||||
---
|
||||
|
||||
## 架构图
|
||||
## 架构分层
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────────────┐
|
||||
│ CLI Entry Point │
|
||||
│ (Program.cs / System.CommandLine) │
|
||||
├──────────────────────────────────────────────────────────────────────┤
|
||||
│ Application Layer │
|
||||
│ ┌───────────────┐ ┌──────────────┐ ┌────────────┐ ┌──────────────┐ │
|
||||
│ │ LocalIngestion│ │ Publishing │ │ Exporting │ │Administration│ │
|
||||
│ │ ParseService │ │AggregationSvc│ │ExportSvc │ │ StatsService │ │
|
||||
│ │ ScenarioSvc │ │ThresholdCalc │ │ │ │ CleanService │ │
|
||||
│ │ DimensionSvc │ │ │ │ │ │ │ │
|
||||
│ └───────────────┘ └──────────────┘ └────────────┘ └──────────────┘ │
|
||||
│ ┌──────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ Parsing │ │
|
||||
│ │ QfodParser │ PlossParser │ FileNameParser │ │
|
||||
│ └──────────────────────────────────────────────────────────────────┘ │
|
||||
├──────────────────────────────────────────────────────────────────────┤
|
||||
│ Domain Layer │
|
||||
│ ┌─────────────────────────┐ ┌──────────────────────────────────────┐ │
|
||||
│ │ Local/ (本地实体) │ │ Release/ (发布实体) │ │
|
||||
│ │ TxPanel, TxHardware │ │ ChargingParameterRecord │ │
|
||||
│ │ TxSoftware, RxType │ │ │ │
|
||||
│ │ TestScenario │ │ │ │
|
||||
│ │ QfodRecord, PlossRecord │ │ │ │
|
||||
│ └─────────────────────────┘ └──────────────────────────────────────┘ │
|
||||
├──────────────────────────────────────────────────────────────────────┤
|
||||
│ Infrastructure Layer │
|
||||
│ ┌───────────────┐ ┌──────────────┐ ┌────────────┐ ┌──────────────┐ │
|
||||
│ │ LocalData │ │ ReleaseData │ │Configuration│ │ Security │ │
|
||||
│ │ WctMinerDbCtx │ │ReleaseDbCtx │ │AppSettings │ │PathValidator │ │
|
||||
│ │ DbCtxFactory │ │ReleaseDbCtxF │ │ │ │ │ │
|
||||
│ │ SeedData │ │ │ │ │ │ │ │
|
||||
│ └───────────────┘ └──────────────┘ └────────────┘ └──────────────┘ │
|
||||
└──────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ CLI Entry Point │
|
||||
│ (Program.cs / System.CommandLine) │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Service Layer │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ ParseService │ ErrorHandlingService │ ThresholdCalc │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Parser Layer │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ QfodParser │ PlossParser │ LogFileReader │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Data Layer │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Models │ WctMinerDbContext │ IDbContextFactory │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Infrastructure │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Configuration │ Serilog │ AppSettings │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 核心设计原则
|
||||
|
||||
| 原则 | 说明 |
|
||||
|------|------|
|
||||
| 技术栈 | .NET 8.0 LTS + C# 12.0 + EF Core 8.0 |
|
||||
| 数据库 | SQLite(当前)/ PostgreSQL(后续),配置切换 |
|
||||
| 解析模式 | 批处理,正则表达式匹配 |
|
||||
| ORM 模式 | Code First,支持迁移自动化 |
|
||||
| CLI 框架 | System.CommandLine,命令模式 |
|
||||
| 技术栈 | .NET 8.0 + C# 12.0 + EF Core 8.0 |
|
||||
| 数据库 | local.db / release.db 两个独立 SQLite 数据库 |
|
||||
| 本地/发布隔离 | 无外键、无导航属性、无数据库级关联 |
|
||||
| 解析模式 | 批处理,正则表达式 |
|
||||
| CLI | System.CommandLine,命令模式 |
|
||||
| 汇总规则 | 按业务键分组取平均值,缺失字段允许为空 |
|
||||
|
||||
---
|
||||
## 目录结构
|
||||
|
||||
## 假设/歧义标注
|
||||
|
||||
| 标注 | 内容 |
|
||||
|------|------|
|
||||
| [A] | 使用 .NET 8.0 LTS 版本 |
|
||||
| [A] | 初期使用 SQLite,架构支持切换 PostgreSQL |
|
||||
| [?] | 增量解析策略需确认 |
|
||||
| [?] | 多次解析同一文件的处理策略需确认 |
|
||||
```text
|
||||
src/
|
||||
├── Gpulse.WCT.DataAnalyzer/ # CLI 入口
|
||||
│ ├── Commands/ # 命令实现
|
||||
│ │ ├── ParseCommand.cs
|
||||
│ │ ├── AggregateCommand.cs
|
||||
│ │ ├── StatsCommand.cs
|
||||
│ │ ├── ExportCommand.cs
|
||||
│ │ └── CleanCommand.cs
|
||||
│ ├── Program.cs
|
||||
│ └── appsettings.json
|
||||
│
|
||||
└── Gpulse.WCT.DataAnalyzer.Core/ # 核心库
|
||||
├── Application/ # 应用层
|
||||
│ ├── Parsing/ # 解析器
|
||||
│ │ ├── IParser.cs
|
||||
│ │ ├── QfodParser.cs
|
||||
│ │ ├── PlossParser.cs
|
||||
│ │ └── FileNameParser.cs
|
||||
│ ├── LocalIngestion/ # 本地日志解析
|
||||
│ │ ├── ParseService.cs
|
||||
│ │ ├── ScenarioService.cs
|
||||
│ │ └── DimensionService.cs
|
||||
│ ├── Publishing/ # 发布汇总
|
||||
│ │ ├── AggregationService.cs
|
||||
│ │ └── ThresholdCalculator.cs
|
||||
│ ├── Exporting/ # 导出
|
||||
│ │ └── ExportService.cs
|
||||
│ └── Administration/ # 管理
|
||||
│ ├── StatsService.cs
|
||||
│ └── CleanService.cs
|
||||
├── Domain/ # 领域实体
|
||||
│ └── Models/
|
||||
│ ├── TxPanel.cs # 本地-维度
|
||||
│ ├── TxHardware.cs
|
||||
│ ├── TxSoftware.cs
|
||||
│ ├── RxType.cs
|
||||
│ ├── TestScenario.cs
|
||||
│ ├── QfodRecord.cs
|
||||
│ ├── PlossRecord.cs
|
||||
│ └── ChargingParameterRecord.cs # 发布-实体
|
||||
└── Infrastructure/ # 基础设施
|
||||
├── LocalData/ # 本地数据库
|
||||
│ ├── WctMinerDbContext.cs
|
||||
│ ├── DbContextFactory.cs
|
||||
│ ├── IDbContextFactory.cs
|
||||
│ ├── SeedData.cs
|
||||
│ └── Configurations/
|
||||
├── ReleaseData/ # 发布数据库
|
||||
│ ├── ReleaseDbContext.cs
|
||||
│ ├── ReleaseDbContextFactory.cs
|
||||
│ ├── IReleaseDbContextFactory.cs
|
||||
│ └── Configurations/
|
||||
├── Configuration/ # 配置
|
||||
│ └── AppSettings.cs
|
||||
├── Security/ # 安全
|
||||
│ ├── PathValidator.cs
|
||||
│ └── SecurityConstants.cs
|
||||
└── Extensions/ # DI 扩展
|
||||
└── ServiceCollectionExtensions.cs
|
||||
```
|
||||
Reference in New Issue
Block a user