# bytech-cloud
**Repository Path**: ningbo-boyu/bytech-cloud
## Basic Information
- **Project Name**: bytech-cloud
- **Description**: No description available
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-06-23
- **Last Updated**: 2026-07-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# javatech-cloud
基于 Spring Cloud 微服务架构的 **SaaS 多租户平台**,支持微服务 / 单体一键切换部署。
## 核心功能
| 功能 | 说明 |
|------|------|
| **双系统登录切换** | 平台管理员 + 租户用户两套身份体系,前端任意切换互不冲突 |
| **多租户数据隔离** | 基于 MySQL Schema(`USE database`)的轻量级隔离,每个租户独立库 |
| **微服务/单体双模式** | `monolith` Profile 一键聚合,单体模式下 Feign 接口零网络开销 |
| **RBAC 权限模型** | 平台/租户两套 RBAC 体系,`@PreAuth` 方法级权限 + 前端路由守卫 |
| **操作审计日志** | 等保三级合规的 `@OperLog` + `@DataChangeLog` + HTTP 访问日志 |
| **文件服务** | 文件上传下载 / OSS 适配 / 断点续传 |
| **IP 黑名单** | 支持 API / Gateway 两级拦截 |
| **代码生成器** | MyBatis-Plus 代码生成,一键生成 Controller/Service/Mapper/Entity |
## 技术选型
| 类别 | 技术 | 版本 |
|------|------|------|
| 基础框架 | Spring Boot + Spring Cloud + Spring Cloud Alibaba | 3.2.5 / 2023.0.1 |
| 注册/配置 | Nacos | 2.3.2 |
| 网关 | Spring Cloud Gateway (WebFlux) | 4.1.x |
| 数据库 | MySQL | 8.0 |
| 连接池 | Druid | 1.2.20 |
| ORM | MyBatis-Plus + dynamic-datasource | 3.5.5 / 4.2.0 |
| 安全认证 | Sa-Token(双 StpLogic)+ JWT | 1.37.0 |
| 远程调用 | OpenFeign + LoadBalancer | 4.1.1 |
| 缓存 | Redis + Redisson | 7.x |
| API 文档 | Knife4j (OpenAPI 3.0) | 4.4.0 |
| 对象转换 | MapStruct | 1.5.5 |
| 工具库 | Hutool | 5.8.24 |
| IP 定位 | ip2region(离线) | 3.3.7 |
| Java | JDK 17 | - |
## 模块结构
```
javatech-cloud
├── bytech-common 公共模块聚合
│ ├── bytech-common-core 核心:R、异常、常量、TenantContextHolder
│ ├── bytech-common-security-core 安全核心:白名单、IP黑名单(无 Web 依赖)
│ ├── bytech-common-security 安全:@PreAuth、LoginUser、Sa-Token 双 StpLogic
│ ├── bytech-common-log 日志:@OperLog / @DataChangeLog / 访问日志
│ ├── bytech-common-web Web:全局异常处理、Jackson、Knife4j
│ ├── bytech-common-redis Redis:序列化、缓存、分布式锁
│ ├── bytech-common-mybatis MyBatis:分页、自动填充、动态数据源、Druid
│ └── bytech-common-tenant 多租户:Schema 拦截器、Header 提取、Feign 透传
├── bytech-feign-api Feign API 聚合
│ ├── bytech-feign-api-system 系统服务 API
│ └── bytech-feign-api-platform 平台服务 API
├── bytech-gateway Spring Cloud Gateway 网关
├── bytech-auth 认证服务(登录/登出/权限加载)
├── bytech-modules 业务模块聚合
│ ├── bytech-system 租户系统(用户/角色/菜单/部门/字典/日志/配置)
│ ├── bytech-platform 平台管理(租户CRUD/套餐/平台RBAC)
│ └── bytech-file 文件服务(上传下载/OSS/断点续传)
└── bytech-boot 单体启动聚合模块
```
## 双系统登录切换
平台管理员和租户用户拥有**完全独立的身份体系**,共享同一前端、同时在线、自由切换。
```
┌─────────────────────────────────────────────────────┐
│ 平台管理员 (loginType="platform") │
│ 路径: /platform/* StpLogic: platformStpLogic │
│ Token Redis Key: platform:token:xxx │
│ 数据库: bytech_platform (全局唯一) │
├─────────────────────────────────────────────────────┤
│ 租户用户 (loginType="auth") │
│ 路径: /system/* StpLogic: stpLogic (主) │
│ Token Redis Key: auth:token:xxx │
│ 数据库: bytech_system_{tenantCode}(每个租户独立库) │
└─────────────────────────────────────────────────────┘
```
- 两套 `StpLogic` 共享同一个 Redis 连接,通过不同 `loginType` 实现 Key 隔离,**可同时在线互不覆盖**
- 前端双 Token 并存于 `localStorage`,`currentLoginType` 存于 `sessionStorage`(多 Tab 独立)
- 退出时自动切换到另一已登录身份
> 详细文档:[docs/双系统同时登录机制.md](docs/双系统同时登录机制.md)
## 多租户数据隔离
采用 **Schema 级隔离**(每个租户独立 MySQL 库),轻量且高效。
```
HTTP 请求 (Authorization: Bearer {token})
│
├─ Gateway AuthFilter
│ └─ 从 Redis TokenSession 读取 LoginUser → tenantCode
│ └─ 写入可信 Tenant-Code Header(先清除外部伪造头)
│
├─ TenantHeaderInterceptor(Servlet Filter)
│ └─ Header → TenantContextHolder (TransmittableThreadLocal)
│
└─ TenantSchemaInterceptor(MyBatis Plugin)
└─ SQL 执行前 USE bytech_system_{tenantCode}
└─ 无 tenantCode → 降级 USE bytech_system
```
| 组件 | 路径 | 功能 |
|------|------|------|
| `TenantContextHolder` | `bytech-common-core/.../holder/` | TransmittableThreadLocal 线程安全传递 |
| `TenantHeaderInterceptor` | `bytech-common-tenant/.../interceptor/` | 从 Header 提取并设置上下文 |
| `TenantSchemaInterceptor` | `bytech-common-tenant/.../interceptor/` | MyBatis Plugin,SQL 前动态 USE |
| `TenantFeignInterceptor` | `bytech-common-tenant/.../interceptor/` | Feign 调用时透传租户信息 |
| `TenantCodeResolver` | `bytech-common-security/.../utils/` | 从 Token 或 Session 解析 tenantCode |
**数据源设计**:
- `tenant` 数据源(primary):共享连接池,`USE` 动态切换,零额外开销
- `platform` 数据源:`@DS("platform")` 注解切换,固定连接 `bytech_platform`
**可拔插**:不引入 `bytech-common-tenant` 时,多租户完全不激活。
## 微服务 / 单体双模式
通过 `monolith` Profile 一键切换,单体模式直接注入 Controller Bean 替代 Feign HTTP 调用。
| 模式 | Profile | Nacos | Feign | 启动方式 |
|------|---------|-------|-------|---------|
| **微服务** | `dev`/`prod` | ✅ 启用 | ✅ HTTP 代理 | 分别启动各服务 |
| **单体** | `monolith` | ❌ 禁用 | ❌ 本地注入 | 启动 bytech-boot 即可 |
```bash
# 单体模式(一键启动)
mvn clean package -pl bytech-boot -DskipTests
java -jar bytech-boot/target/bytech-boot-exec.jar --spring.profiles.active=monolith
# 微服务模式(需先启动 Nacos)
# 依次启动 gateway → auth → system → platform → file
```
**单体模式核心设计**:
- `bytech-boot` 聚合所有业务模块,`@ComponentScan("com.bytech")` 全量扫描
- `SecurityConfig`(`@Profile("monolith")`):Servlet 拦截器链(安全配置不依赖 Gateway)
- Controller `implements FeignClient` 接口,单体模式下 `@Autowired` 直接注入本地 Bean,零网络开销
> 详细文档:[docs/API_CALLING_CONVENTION.md](docs/API_CALLING_CONVENTION.md)
## 审计日志体系
等保三级合规的完整审计方案,三种维度覆盖:
| 类型 | 注解/采集 | 存储表 | 说明 |
|------|-----------|--------|------|
| **操作日志** | `@OperLog` | `sys_oper_log` / `platform_oper_log` | 记录增删改查等业务操作 |
| **数据变更** | `@DataChangeLog` | `sys_data_change_log` | 新旧值 diff 对比 |
| **访问日志** | 全局拦截器自动采集 | `sys_access_log` / `platform_access_log` | HTTP 请求全量审计 |
**访问日志架构**:
```
单体模式: AccessLogInterceptor (Servlet) → AsyncLogService → Feign → Controller → DB
微服务: AccessLogGatewayFilter (Gateway) → WebClient POST → Controller → DB
```
日志表通过数据库触发器禁止 UPDATE/DELETE,等保合规不可篡改。
## 路线图 (TODO)
下一阶段计划实现的功能模块:
### 文件服务
| 功能 | 说明 |
|------|------|
| 本地存储 / OSS 多云适配 | 支持本地磁盘、阿里云 OSS、腾讯云 COS、MinIO 等,配置切换 |
| 断点续传 | 大文件分片上传,支持暂停/恢复 |
| 文件预览 | 图片、PDF、Office 文档在线预览 |
| 文件水印 | 图片/PDF 动态水印,防盗溯源 |
### 系统监控
| 功能 | 说明 |
|------|------|
| 在线用户 | 实时查看在线用户列表,支持强退 |
| 定时任务 | 基于 XXL-JOB 的分布式任务调度管理 |
| 服务监控 | Spring Boot Admin,查看各服务 CPU/内存/JVM/GC 指标 |
| Redis 监控 | Redis 连接数、命中率、内存使用量等实时监控 |
### 开发工具
| 功能 | 说明 |
|------|------|
| 开放接口 | Swagger / Knife4j 在线调试,自动生成 API 文档 |
| 代码生成 | 支持在线生成 Controller / Service / Mapper / Entity / Vue 页面 |
| 在线表单 | 可视化拖拽表单设计器,动态生成 CRUD 页面 |
| 流程控制 | 集成 Flowable 工作流引擎,支持可视化流程设计 |
### AI 功能
| 功能 | 说明 |
|------|------|
| 智能助手 | 接入大语言模型,自然语言查询数据、生成报表 |
| 代码审查 | AI 辅助代码 Review,自动检测规范和安全问题 |
| 智能日志分析 | 异常日志自动聚类、告警、给出修复建议 |
| 合规检查 | AI 自动审计操作日志,识别异常行为 |
### IP 地理位置
集成 ip2region 3.x 离线数据库,无需联网,微秒级解析。
**开启方式**:将 `ip2region_v4.xdb` / `ip2region_v6.xdb` 放入 `bytech-common/bytech-common-core/src/main/resources/ipdb/`
下载地址:[ip2region data](https://github.com/lionsoul2014/ip2region/tree/master/data)
## 快速开始
### 环境要求
- JDK 17+
- MySQL 8.0+
- Redis 7.x
- Nacos 2.x(微服务模式)
- Maven 3.8+
### 1. 初始化数据库
```sql
-- 创建公共库
CREATE DATABASE bytech_platform DEFAULT CHARACTER SET utf8mb4;
CREATE DATABASE bytech_system DEFAULT CHARACTER SET utf8mb4;
-- 导入表结构
source sql/bytech_platform.sql;
source sql/bytech_system.sql;
```
### 2. 单体模式(快速体验)
```bash
mvn clean package -pl bytech-boot -DskipTests
java -jar bytech-boot/target/bytech-boot-exec.jar --spring.profiles.active=monolith
```
访问 `http://localhost:8080`,默认账号 `admin` / `admin123`。
### 3. 微服务模式
3.1 启动 Nacos + Redis + MySQL
3.2 导入 Nacos 配置(`nacos-configs/dev/` 目录)
3.3 依次启动:
```bash
# Gateway
mvn spring-boot:run -pl bytech-gateway -Dspring.profiles.active=dev
# Auth
mvn spring-boot:run -pl bytech-auth -Dspring.profiles.active=dev
# System
mvn spring-boot:run -pl bytech-modules/bytech-system -Dspring.profiles.active=dev
# Platform
mvn spring-boot:run -pl bytech-modules/bytech-platform -Dspring.profiles.active=dev
# File
mvn spring-boot:run -pl bytech-modules/bytech-file -Dspring.profiles.active=dev
```
## 项目文档
| 文档 | 说明 |
|------|------|
| [双系统登录机制](docs/双系统同时登录机制.md) | 双 Token + currentLoginType 切换方案 |
| [多租户数据隔离](docs/multi-tenant-design.md) | Schema 级别隔离设计 |
| [API 调用规范](docs/API_CALLING_CONVENTION.md) | Controller implements FeignClient 双模约定 |
| [RBAC 权限模型](docs/RBAC数据库设计与逻辑说明.md) | 平台 + 租户两套 RBAC |
| [前端登录逻辑](docs/前端登录两种系统类型逻辑分析.md) | 前端双系统登录状态管理 |
| [登录逻辑说明](docs/login-logic.md) | 认证流程详解 |
| [数据库规范](docs/database-specification.md) | 建表与命名规范 |
| [系统配置设计](docs/sys_config_design.md) | 参数配置模块设计 |
## License
MIT