校园一体化管理系统 私有化专属开发方案(单MySQL架构)
文档说明
-
学校内网断网运行:系统设计为完全离线运行模式,不依赖任何外部网络连接。所有功能模块(包括用户认证、数据同步、文件上传下载、报表生成等)均可在无互联网环境下正常工作。系统启动时自动检测网络状态,并切换到纯离线模式,避免因网络中断导致业务中断。
-
低配服务器适配:针对中小学常见的低配置服务器环境(如4核CPU、8GB内存、500GB硬盘),系统进行了全方位优化:
- 数据库层面采用MySQL单实例架构,减少多数据库的资源消耗
- 内存使用优化,前端采用Blazor WebAssembly减少服务器渲染压力
- 定时任务智能调度,避免高峰时段集中执行
- 提供Redis队列降级方案,在内存不足时可切换为文件队列
-
无外网依赖:彻底移除所有对外部服务的强依赖:
- 前端资源全部本地打包,无CDN引用
- 关闭版本自动更新检测
- 短信、邮件等通知组件可完全关闭或替换为站内消息
- 所有API接口均为内网地址,不调用任何外部API
-
教育等保2.0合规要求:系统从设计层面满足等保2.0三级安全要求:
- 身份鉴别:支持密码复杂度策略、多因素认证、登录失败锁定
- 访问控制:基于角色的细粒度权限控制,支持IP白名单限制
- 安全审计:完整操作日志记录,关键操作二次确认,日志留存3年
- 数据完整性:数据库字段级加密,传输过程HTTPS加密
- 数据保密性:学生隐私数据脱敏展示,敏感信息加密存储
- 备份恢复:自动定时备份,支持一键恢复,备份文件加密存储
- 恶意代码防范:文件上传安全扫描,XSS/SQL注入全局过滤
一、项目整体概述
1.1 项目目标
1.2 技术栈清单(私有化优化版)
后端
- 主框架:ASP.NET Core 8 WebAPI
- ORM:SqlSuagr(MySQL)
- 数据库:MySQL 8.0(唯一存储介质)
- 缓存/分布式锁/轻量队列:Redis
- 分布式消息队列:RabbitMQ(可选,低配机器切换RedisQueue降级)
- 定时任务:Quartz.NET(任务持久化至MySQL)
- 认证授权:JWT + 本地离线License授权
- 日志:Serilog(本地磁盘存储)
- 序列化:System.Text.Json
前端
- 框架:Blazor WebAssembly
- UI组件:Ant Design Blazor
- 资源策略:全部静态资源本地打包,无CDN外网依赖
文件存储
- 默认:本地磁盘目录
- 可选拓展:内网NAS共享文件夹
- 弃用公有OSS强依赖,仅作为可选配置
部署交付
- Windows:一键图形化安装程序
- Linux:一键Shell离线部署脚本
- 升级:离线Zip增量升级包,后台可视化执行
二、解决方案项目分层结构
(第一版目录结构 项目、功能划分)
SaaSCampus.sln
├─ 01.Core 【核心底层,所有项目依赖,区分私有化/SaaS双模式】
│ ├─ DeploymentSwitch // 部署模式全局开关:私有化单校 / SaaS多租户
│ ├─ SaaSTenant // 多租户上下文,私有化模式自动屏蔽TenantId过滤逻辑
│ ├─ AuthPermission // JWT认证、RBAC权限、IP白名单、离线License校验
│ ├─ DomainEvent // 领域事件总线(本地内存总线优先,MQ可选)
│ ├─ DataBase
│ │ └─ MySqlBaseDbContext // 唯一数据库上下文,统一实体基类
│ ├─ Repository // MySQL通用仓储、分页、事务、分表工具封装
│ ├─ ServiceContract // 跨模块同步查询抽象契约(解耦核心)
│ │ ├─ IEduQueryService.cs
│ │ ├─ ITeachingQueryService.cs
│ │ └─ IMoralQueryService.cs
│ ├─ MessageQueue // MQ统一封装、Redis降级队列、消费幂等、失败重放表
│ ├─ GlobalFilter // 全局异常、参数校验、统一返回、XSS过滤
│ ├─ Security // 隐私数据加密、脱敏工具、审计日志基类
│ └─ EntityBase // 全局MySQL实体基类
│ ├─ SaaS模式:TenantId、CreatorId、CreateTime、UpdateTime、IsDeleted
│ └─ 私有化模式:移除TenantId字段,自动适配
├─ 02.Common 【通用工具库,离线私有化适配】
│ ├─ ExcelHelper // 离线导入导出,脱敏开关
│ ├─ FileHelper // 本地/NAS文件管理、上传鉴权、自动清理临时文件
│ ├─ RedisCache // 缓存雪崩/击穿/穿透防护、分布式锁
│ ├─ QuartzTask // 定时任务持久化、断点续跑、并发互斥锁
│ ├─ BackupHelper // MySQL本地自动备份、加密、一键恢复
│ ├─ DeployHelper // 安装初始化、离线升级、数据库迁移回滚
│ ├─ SerializeHelper // 统一序列化工具
│ └─ NotifyHelper // 内网消息推送,屏蔽外网短信强制依赖
├─ 03.Module.Edu 【教务模块|最高优先级】
│ ├─ Entity // MySQL实体,大文本拆分附属表
│ ├─ Dto // 入参/出参DTO,敏感字段自动脱敏
│ ├─ Repository // 数据仓储实现
│ ├─ Service
│ │ ├─ BusinessService // 学籍、排课、考勤、考务、成绩业务
│ │ └─ QueryService // 实现Core IEduQueryService 对外查询契约
│ ├─ Event // 教务领域事件实体
│ └─ Controller // 模块API控制器
├─ 04.Module.Teaching 【教学教研模块|次优先级】
│ ├─ Entity、Dto、Repository、Service、Event、Controller 同教务结构
│ └─ QueryService 实现Core ITeachingQueryService
├─ 05.Module.Moral 【轻量化德育模块|低优先级】
│ ├─ Entity、Dto、Repository、Service、Event、Controller 同教务结构
│ └─ QueryService 实现Core IMoralQueryService
├─ 06.Api.Host 【API启动入口,一体化单进程】
│ ├─ Program.cs
│ ├─ Extensions // 模块注册扩展、部署模式初始化
│ └─ Middleware // 内网IP拦截、租户、日志、跨域中间件
└─ 07.Client.Blazor 【前端全离线打包】
├─ PlatformTool // 平台运营工具(生成离线License、升级包)
└─ SchoolAdmin // 校内管理端(私有化客户唯一使用端)
├─ 系统管理员面板:配置、备份、升级、监控、License导入
├─ 教务/教研/德育主任面板
├─ 班主任/任课教师面板
├─ 学生独立端
└─ 家长端
(更改目录结构 DDD?? 2026年7月14日 20:25:11)
SchoolSaas.sln
├─ Client.Blazor # 前端项目(外网独立部署,Blazor‑WebAssembly非托管模式 .NET8)
│ ├─ Pages # 业务页面组件,按模块划分文件夹
│ │ ├── SystemManage # 系统管理员页面:配置、备份、升级、监控、License导入
│ │ ├── EduPage # 教务/教研/德育主任页面
│ │ ├── TeacherPage # 班主任、任课教师页面
│ │ ├── StudentPage # 学生独立端页面
│ │ └─ ParentPage # 家长端页面
│ ├─ SharedComponents # 公共UI组件
│ │ ├── PermissionButton.razor # 权限受控按钮组件(后端权限标识控制显示)
│ │ ├── CommonTable.razor # 通用分页表格组件
│ │ ├── FileUpload.razor # 文件上传组件
│ │ └─ ModalDialog.razor # 弹窗公共组件
│ ├─ HttpServices # 统一封装HttpClient请求服务
│ │ ├── HttpInterceptor.cs # 请求拦截器:自动附加Bearer‑Token、统一解析返回结果、Token过期跳转登录
│ │ ├── EduApiService.cs # 教务模块请求服务
│ │ ├── TeachingApiService.cs # 教研模块请求服务
│ │ └─ MoralApiService.cs # 德育模块请求服务
│ ├─ PlatformTool # 平台运营工具(新增,对应原有Core里版本校验)
│ │ └── LicenseCheck.cs # 读取后端License,校验私有化授权有效期
│ └─ wwwroot
│ └─ appsettings.json # 配置外网API接口地址,仅保存域名,无密钥
│
├─ SchoolSaas.Api # 后端API项目(ASP.NET‑Core 8,内网部署,外网通过Yarp+IP白名单访问)
│ ├─ Controllers # 控制器,只返回DTO,禁止返回数据库Entity实体
│ │ ├── SystemController.cs # 系统管理接口
│ │ ├── EduController.cs # 教务模块接口
│ │ ├── TeachingController.cs # 教研模块接口
│ │ └─ MoralController.cs # 德育模块接口
│ ├─ Filters # 全局过滤器(对应Core层GlobalFilter、Security校验逻辑)
│ │ ├── PermissionFilter.cs # JWT、RBAC权限校验、IP白名单校验(内网放行、外网严格校验)
│ │ ├── GlobalExceptionFilter.cs # 全局异常过滤器:内网输出堆栈、外网屏蔽异常详情
│ │ ├── RequestAuditFilter.cs # 审计日志:记录外网IP、操作账号、请求参数
│ │ └── ValidateFilter.cs # 参数校验、XSS过滤
│ ├─ Extensions # 新增:服务注册扩展(原Core模块初始化逻辑)
│ │ ├── ServiceRegister.cs # 批量注入Repository、Service、SqlSugar、Redis、Hangfire
│ │ └── DeployModeExtension.cs # 部署模式初始化:私有化单校 / SaaS‑多租户模式切换
│ ├─ Middleware # 新增:中间件(原Core中间件逻辑)
│ │ ├── YarpProxyMiddleware.cs # Yarp反向代理,外网IP限流、https证书处理
│ │ └─ TenantMiddleware.cs # 解析当前租户信息
│ └─ Program.cs # 程序入口:注册SqlSugar、JWT、CORS跨域、Hangfire定时任务、全局过滤器
│
├─ SchoolSaas.Application # 应用服务层(业务逻辑层)
│ ├─ Services # 各个模块业务Service
│ │ ├── BusinessService # 业务实现(对应原有Module模块)
│ │ │ ├── ISystemService.cs & SystemService.cs
│ │ │ ├── IEduService.cs & EduService.cs # 学籍、排课、成绩业务
│ │ │ ├── ITeachingService.cs & TeachingService.cs # 教研业务
│ │ │ └── IMoralService.cs & MoralService.cs # 德育考勤业务
│ │ └─ QueryService # 跨模块查询服务契约实现(对应Core里ServiceContract)
│ │ ├── IEduQueryService.cs
│ │ ├── ITeachingQueryService.cs
│ │ └─ IMoralQueryService.cs
│ └─ Dtos # 入参DTO和返回DTO,后续同步至Shared打包Nuget给前端使用
│ ├── InputDtos # 前端传入参数模型
│ └─ OutputDtos # 返回前端数据模型,敏感字段自动脱敏
│
├─ SchoolSaas.Domain # 领域层(对应原01‑Core核心底层,把核心定义全部移入Domain)
│ ├─ Entities # SqlSugar‑Entity实体类,对应数据库表
│ │ ├── BaseEntity.cs # 全局实体基类:CreatorId、CreateTime、UpdateTime、IsDeleted(SqlSugar自动赋值)
│ │ ├── ITenantEntity.cs # 租户接口:TenantId;私有化模式自动关闭TenantId过滤
│ │ ├── EduEntities # 教务相关实体(Student、Class、Score)
│ │ ├── TeachingEntities # 教研相关实体
│ │ └─ MoralEntities # 德育相关实体
│ ├─ Enums # 系统枚举(部署模式、角色类型、学籍状态、考勤状态)
│ │ ├── DeployMode.cs // 枚举:PrivateSingleSchool私有化模式 / SaaSMultiTenant多租户模式
│ │ └── BusinessEnums // 业务枚举
│ ├─ DomainEvents # 领域事件(原Core.DomainEvent)
│ │ ├── IEventBus.cs
│ │ ├── LocalEventBus.cs // 私有化默认本地内存事件总线
│ │ ├── MqEventBus.cs // 预留MQ模式,多集群部署启用
│ │ └── EventModels // 事件实体:成绩提交事件、新增学生事件
│ ├─ TenantContext # 新增(原Core‑SaaSTenant租户逻辑)
│ │ ├── CurrentTenant.cs // 获取当前租户ID、登录用户信息
│ │ └─ SqlSugarTenantFilter.cs // SqlSugar全局租户过滤器,根据DeployMode自动启用/关闭TenantId条件
│ └─ AuthContract # 新增(原Core‑AuthPermission)
│ ├── JwtModel.cs
│ ├── PermissionModel.cs
│ └── LicenseModel.cs // 私有化授权模型
│
├─ SchoolSaas.Infrastructure # 基础设施层(封装SqlSugar、Redis、工具类、定时任务)
│ ├─ Repository # 基于SqlSugar实现仓储BaseRepository(原Core.DataBase逻辑)
│ │ ├── IBaseRepository.cs
│ │ ├── BaseRepository.cs // 封装分页、联表查询、批量操作、Lambda查询
│ │ ├── UnitOfWork.cs // 工作单元,统一事务提交回滚
│ │ └── DbSetup.cs // SqlSugar初始化:Code‑First、读写分离配置、种子数据初始化
│ ├─ Cache # Redis缓存封装(原Core.MessageQueue、Common.RedisCache)
│ │ ├── RedisHelper.cs // 缓存雪崩、击穿防护,分布式锁
│ │ └── RedisMqProvider.cs // Redis降级消息队列、失败重试
│ └─ CommonTools # 文件操作、加解密、公共工具类(对应02‑Common全部工具)
│ ├── FileHelper.cs // 本地/NAS文件管理、自动清理临时文件
│ ├── ExcelHelper.cs // Excel导入导出
│ ├── BackupHelper.cs // MySQL定时备份、加密恢复
│ ├── SerializeHelper.cs // 序列化工具
│ ├── QuartzHelper.cs // Hangfire定时任务封装(成绩统计、考勤汇总任务)
│ ├── NotifyHelper.cs // 内网消息推送
│ └─ SecurityHelper.cs // 密码加密、数据脱敏、审计日志(原Core‑Security)
│
└─ SchoolSaas.Shared # 公共类库,打包私有Nuget包
├─ ResultModel.cs // 统一返回模型 Result<T>
├─ SharedDtos // 将Application.Dtos同步到此项目,供前后端共用
├─ CommonEnums // Domain里的枚举同步至此,前端Blazor引用
└─ GlobalConsts.cs // 全局常量、正则、分页公共模型
规则:Client.Blazor和API项目仅通过Nuget引用SchoolSaas.Shared;前后端无项目引用,彻底解耦
项目引用强制约束
三、数据库设计(仅MySQL8.0,私有化专项优化)
3.1 整体存储规划
全部业务、文本、附件元数据、操作日志、统计快照统一存入MySQL;
本地磁盘/NAS仅存储真实文件(教案附件、图片、微课),数据库只存文件路径元数据。
3.2 核心数据表分层
- sys_user、sys_role、sys_menu、sys_permission:账号权限
- sys_attachment:全局附件元数据表,全业务复用
- sys_operation_log_yyyyMM:按月分表,操作审计日志(合规留存3年)
- sys_task_record:定时任务执行记录
- sys_message:站内离线消息
- sys_upgrade_log:系统升级、数据库迁移记录
- sys_backup_record:数据库本地备份记录
年级、班级、学生、教师、学籍、排课、考勤、考试、成绩;
大文本拆分附属表:edu_student_note(学生长篇备注)
教研组、教案主表+教案内容附属表、作业、听课记录、资源库元数据
德育配置、积分记录、违纪、班级量化、评优归档表
3.3 私有化专属优化点
- SaaS多租户:所有业务表联合索引 IX_TenantId_Id,强制过滤租户;
- 私有化单校:自动移除TenantId字段,索引简化;
所有LONGTEXT类型单独拆分子表,主列表查询不加载大文本,详情页按需查询;
程序启动自动检测并创建当月日志分表,后台提供一键归档旧日志功能;
毕业年级数据一键迁移至归档表,日常查询过滤归档数据,提升查询速度;
后台可视化配置自动备份周期,备份文件加密存储,支持整库/单表一键恢复;
私有化单校统一索引:主键ID、创建时间、班级/学生关联ID;
四、多模块数据交互方案
4.1 同步实时查询(高频基础数据读取)
适用场景:教研读取班级学生、德育读取学籍、跨模块基础数据联动查询
4.2 异步事件联动(数据变更、批量统计、通知)
适用场景:新增学生初始化德育积分、考试结束生成统计、班级删除联动清理作业/教案
- 低配服务器:内存总线本地消费,零中间件依赖;
- 大数据量场景:切换RabbitMQ,消息持久化防断电丢失;
- 最低配降级:Redis队列替代RabbitMQ,减少部署组件;
4.3 消息统一规范
外层统一JSON消息头,Body为强类型实体序列化,禁止手写裸JSON;
私有化关闭MQ外网端口,仅本地进程通信。
五、私有化部署专属核心功能模块
5.1 离线License授权模块(P0必做)
5.2 一键安装&离线升级模块(P0必做)
5.3 本地文件存储管理(P0必做)
5.4 轻量化内置运维监控面板(P1同步开发)
无第三方监控组件,全部内置后台页面:
5.5 等保安全&学生隐私模块(P0必做)
- 密码复杂度、90天强制改密、连续5次登录锁定;
- 内网IP白名单,仅办公网段登录后台;
- 关键操作(批量删除、清空成绩)二次弹窗确认;
- 数据库身份证、手机号AES加密存储;
- 页面展示自动脱敏,Excel导出支持一键脱敏开关;
- 敏感数据导出、查看单独留存审计日志,留存3年;
- 支持离线导入本地CA证书,全站HTTPS加密;
- 接口防刷限流、IP黑名单自动封禁恶意访问;
- 全局XSS过滤,拦截恶意脚本输入。




