光伏监控系统项目架构说明文档

本文章是记录自己正在做的光伏监控系统,由于目前只做了一半,,由AI生成项目架构文档,主要是记录目录结构,和RBAC权限管理,以后可以直接复制本文进行生成初始项目。

1. 项目概览

PMS(Project Management System)是一个基于 ASP.NET Core 8.0 的综合性管理系统,集成了用户权限管理、设备管理、Modbus 通信等功能。系统采用分层架构设计,具有良好的可扩展性和可维护性。

1.1 核心功能

  • RBAC 权限管理:基于角色的权限控制体系
  • 设备管理:网关和设备的监控与管理
  • Modbus 通信:与现场设备的通信功能
  • 菜单管理:基于数据库的动态菜单生成
  • 系统设置:系统配置和参数管理

1.2 技术栈

  • 后端:ASP.NET Core 8.0、Entity Framework Core 8.0
  • 数据库:SQL Server
  • 前端:LayUI、JavaScript、CSS3
  • 定时任务:Quartz.NET
  • 通信协议:Modbus TCP

2. 系统架构

2.1 分层架构

PMS 系统采用经典的三层架构设计,各层职责明确,边界清晰:

客户端层

表现层 PMS.Web

业务逻辑层 PMS.BLL

数据访问层 PMS.DAL

数据模型层 PMS.Models

数据库

2.2 核心模块关系

Models层

DAL层

BLL层

Web层

控制器

视图组件

视图

服务

定时任务

仓库

数据库上下文

数据初始化

实体

数据传输对象

3. 目录结构

PMS/
├── PMS.Models/             # 数据模型层
│   ├── DTO/                # 数据传输对象
│   │   ├── UserInfoDTO.cs
│   │   └── ViewMenuDTO.cs
│   ├── Entitys/            # 实体类
│   │   ├── User.cs
│   │   ├── Role.cs
│   │   ├── Menu.cs
│   │   ├── Permission.cs
│   │   ├── Gateway.cs
│   │   ├── Device.cs
│   │   ├── RoleUser.cs
│   │   ├── RoleMenu.cs
│   │   └── RolePermission.cs
│   └── PMS.Models.csproj
├── PMS.DAL/                # 数据访问层
│   ├── DataBase/           # 数据库相关
│   │   ├── MyDbContexts.cs
│   │   └── DbInitializer.cs
│   ├── IRepository/        # 仓库接口
│   │   ├── IRepository.cs
│   │   ├── IUserRepository.cs
│   │   ├── IRoleRepository.cs
│   │   ├── IMenuRepository.cs
│   │   └── IPermissionRepository.cs
│   ├── Repository/         # 仓库实现
│   │   ├── Repository.cs
│   │   ├── UserRepository.cs
│   │   ├── RoleRepository.cs
│   │   ├── MenuRepository.cs
│   │   └── PermissionRepository.cs
│   └── PMS.DAL.csproj
├── PMS.BLL/                # 业务逻辑层
│   ├── IServices/          # 服务接口
│   │   ├── IUserService.cs
│   │   ├── IRoleService.cs
│   │   └── IMenuService.cs
│   ├── Services/           # 服务实现
│   │   ├── UserService.cs
│   │   ├── RoleService.cs
│   │   └── MenuService.cs
│   ├── Jobs/               # 定时任务
│   │   └── ModbusDataGenerationJob.cs
│   └── PMS.BLL.csproj
└── PMS.Web/                # 表现层
    ├── Controllers/        # 控制器
    │   ├── AccountController.cs
    │   ├── UserController.cs
    │   ├── RoleController.cs
    │   ├── MenuController.cs
    │   └── HomeController.cs
    ├── ViewComponents/     # 视图组件
    │   └── MenuViewComponent.cs
    ├── Views/              # 视图
    │   ├── Shared/_Layout.cshtml
    │   ├── Account/Login.cshtml
    │   └── Home/Index.cshtml
    ├── Program.cs          # 应用启动
    └── PMS.Web.csproj

4. 核心功能模块

4.1 权限管理模块

功能说明:实现基于角色的权限控制(RBAC),包括用户、角色、权限的管理。

核心流程

  1. 用户登录验证
  2. 基于角色获取菜单权限
  3. 基于权限控制页面访问

关键类

  • UserService:用户管理服务
  • RoleService:角色管理服务
  • MenuService:菜单管理服务
  • MenuViewComponent:动态菜单生成

权限控制流程

数据库 仓库层 服务层 控制器 认证中间件 客户端 数据库 仓库层 服务层 控制器 认证中间件 客户端 请求访问页面 验证用户身份 转发请求 调用业务逻辑 查询数据 SQL查询 返回数据 返回结果 处理结果 响应页面

4.2 设备管理模块

功能说明:管理网关和设备,包括设备状态监控、数据采集等。

核心实体

  • Gateway:网关设备
  • Device:终端设备
  • CommunicationSettings:通信设置

设备类型

  • 光伏组串(PVString)
  • 逆变器(Inverter)
  • 汇流箱(CombinerBox)
  • 电表(Meter)

4.3 菜单管理模块

功能说明:基于数据库的动态菜单生成,支持多级菜单和权限控制。

核心流程

  1. 用户登录后获取角色
  2. 根据角色查询可访问菜单
  3. 生成树形菜单结构
  4. 渲染到前端页面

菜单结构

  • 首页
  • 系统管理
    • 用户管理
    • 角色管理
    • 权限管理
    • 菜单管理
  • 业务管理
    • 数据查看
    • 数据编辑
  • 系统设置
  • 网关管理
  • 设备管理
  • -通信管理

5. 数据库设计

5.1 核心表结构

用户表(User)
字段名 数据类型 描述
Id int 主键
Username nvarchar(50) 用户名
Password nvarchar(100) 密码
RealName nvarchar(50) 真实姓名
Email nvarchar(100) 邮箱
IsActive bit 是否激活
CreatedAt datetime 创建时间
角色表(Role)
字段名 数据类型 描述
Id int 主键
Name nvarchar(50) 角色名称
Description nvarchar(200) 角色描述
菜单表(Menu)
字段名 数据类型 描述
Id int 主键
Name nvarchar(50) 菜单名称
Url nvarchar(200) 菜单URL
Icon nvarchar(50) 菜单图标
PermissionCode nvarchar(50) 权限代码
ParentId int 父菜单ID
SortOrder int 排序顺序
IsActive bit 是否激活
权限表(Permission)
字段名 数据类型 描述
Id int 主键
Name nvarchar(50) 权限名称
Code nvarchar(50) 权限代码
Description nvarchar(200) 权限描述
关系表
  • RoleUser:角色-用户关联表
  • RoleMenu:角色-菜单关联表
  • RolePermission:角色-权限关联表

5.2 数据初始化

系统启动时会自动执行数据初始化,包括:

  1. 权限数据(8个默认权限)
  2. 角色数据(Admin、User)
  3. 用户数据(admin、user、manager)
  4. 菜单数据(11个默认菜单)
  5. 角色权限关联
  6. 角色用户关联
  7. 角色菜单关联
  8. 网关数据(4个默认网关)
  9. 设备数据(9个默认设备)
  10. 通信设置

6. 技术实现亮点

6.1 分层架构设计

  • 模块化:各层职责明确,便于维护和扩展
  • 依赖注入:使用 ASP.NET Core 内置的依赖注入容器
  • 接口隔离:通过接口定义服务契约,实现松耦合

6.2 数据访问层

  • 通用仓库模式:实现了 IRepository<T> 通用接口
  • 异步操作:所有数据访问方法均支持异步
  • 事务管理:数据初始化使用事务确保数据一致性

6.3 业务逻辑层

  • 服务层封装:业务逻辑集中在服务层处理
  • 权限验证:基于角色的权限控制
  • 定时任务:使用 Quartz.NET 实现 Modbus 数据采集

6.4 表现层

  • MVC 模式:经典的 Model-View-Controller 架构
  • 视图组件:使用 MenuViewComponent 实现动态菜单
  • 认证授权:基于 Cookie 的身份验证

6.5 前端实现

  • LayUI:现代化的前端 UI 框架
  • 响应式设计:适配不同屏幕尺寸
  • 动态菜单:基于用户权限动态生成

7. 系统配置与部署

7.1 配置文件

  • appsettings.json:应用配置
  • appsettings.Development.json:开发环境配置

7.2 数据库连接

"ConnectionStrings": {
  "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=PMS;Trusted_Connection=True;MultipleActiveResultSets=true"
}

7.3 部署步骤

  1. 确保安装了 .NET 8.0 SDK
  2. 配置数据库连接字符串
  3. 执行 dotnet build 构建项目
  4. 执行 dotnet run 启动应用
  5. 首次运行会自动创建数据库并初始化数据

8. 安全特性

8.1 认证与授权

  • Cookie 认证:安全的身份验证机制
  • 基于角色的授权:细粒度的权限控制
  • 访问控制策略:通过策略控制页面访问

8.2 数据安全

  • 参数化查询:防止 SQL 注入
  • 事务管理:确保数据操作的原子性
  • 数据验证:服务端数据验证

9. 性能优化

9.1 数据访问优化

  • 异步操作:提高并发处理能力
  • 延迟加载:按需加载关联数据
  • 缓存机制:减少数据库查询

9.2 代码优化

  • 依赖注入:减少对象创建开销
  • 异步编程:提高响应速度
  • 资源管理:使用 using 语句确保资源释放

10. 扩展与维护

10.1 扩展点

  • 新功能模块:可通过添加新的控制器和服务实现
  • 新设备类型:可扩展 DeviceTypeEnum 枚举
  • 新通信协议:可实现新的通信服务

10.2 维护建议

  • 定期备份:定期备份数据库
  • 日志监控:监控系统运行日志
  • 代码更新:遵循版本控制规范

11. 总结

PMS 系统是一个功能完整、架构清晰的管理系统,采用现代 ASP.NET Core 技术栈,实现了权限管理、设备管理、Modbus 通信等核心功能。系统具有良好的可扩展性和可维护性,适合作为企业级应用的基础框架。

通过分层架构设计、依赖注入、异步编程等技术,系统在性能和可靠性方面都有良好的表现。同时,完善的数据初始化和权限控制机制,确保了系统的安全性和稳定性。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐