<p align="center">
 <img src="https://img.shields.io/badge/Spring%20Cloud-2024-blue.svg" alt="Coverage Status">
 <img src="https://img.shields.io/badge/Spring%20Boot-3.4.5-blue.svg" alt="Downloads">
 <img src="https://img.shields.io/badge/Vue-3.2-blue.svg" alt="Downloads">
</p>

# AGT-Cloud云平台

## 平台简介

![架构图](/.image/common/agt-cloud-architecture.png)

* Java 后端：JDK 17/21 + Spring Boot 3.4.5
* 管理后台的电脑端：Vue3 采用 [vben(ant-design-vue)](https://doc.vben.pro/guide/introduction/vben.html) 企业级管理系统框架
* 管理后台的移动端：采用 [uni-app](https://zh.uniapp.dcloud.io) 方案，一份代码多终端适配，同时支持 APP、小程序、H5！
* 后端采用 Spring Cloud Alibaba 微服务架构，注册中心 + 配置中心 Nacos，定时任务 XXL-Job，服务保障 Sentinel，服务网关 Gateway，分布式事务 Seata
* 数据库可使用 MySQL、Oracle、PostgreSQL、SQL Server、MariaDB、国产达梦 DM、TiDB 等，基于 MyBatis Plus、Redis + Redisson 操作
* 消息队列可使用 Event、Redis、RabbitMQ、Kafka、RocketMQ 等
* 权限认证使用 Spring Security & Token & Redis，支持多终端、多种用户的认证系统，支持 SSO 单点登录
* 支持加载动态权限菜单，按钮级别权限控制，Redis 缓存提升性能
* 支持 SaaS 多租户，可自定义每个租户的权限，提供透明化的多租户底层封装
* 工作流使用 Flowable，支持动态表单、在线设计流程、会签 / 或签、多种任务分配方式
* 高效率开发，使用代码生成器可以一键生成 Java、Vue 前后端代码、SQL 脚本、接口文档，支持单表、树表、主子表
* 实时通信，采用 Spring WebSocket 实现，内置 Token 身份校验，支持 WebSocket 集群
* 集成微信小程序、微信公众号、企业微信、钉钉等三方登陆，集成支付宝、微信等支付与退款
* 集成阿里云、腾讯云等短信渠道，集成 MinIO、阿里云、腾讯云、七牛云等云存储服务
* 集成报表设计器、大屏设计器，通过拖拽即可生成酷炫的报表与大屏

## 内置功能

系统内置多种多种业务功能，可以用于快速你的业务系统：

![功能分层](/.image/common/agt-cloud-biz.png)

* 通用模块（必选）：系统功能、基础设施
* 通用模块（可选）：工作流程、支付系统、数据报表、会员中心
* 业务系统（按需）：ERP 系统、CRM 系统、商城系统、微信公众号、AI 大模型

### 系统功能

|  功能  | 描述                    |
|------|-----------------------|
| 用户管理 | 用户是系统操作者，该功能主要完成系统用户配置 |
| 在线用户 | 当前系统中活跃用户状态监控，支持手动踢下线 |
| 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 |
| 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等，本地缓存提供性能 |
| 部门管理 | 配置系统组织机构（公司、部门、小组），树结构展现支持数据权限 |
| 岗位管理 | 配置系统用户所属担任职务          |
| 租户管理 | 配置系统租户，支持 SaaS 场景下的多租户功能        |
| 租户套餐 | 配置租户套餐，自定每个租户的菜单、操作、按钮的权限       |
| 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护  |
| 短信管理 | 短信渠道、短息模板、短信日志，对接阿里云、腾讯云等主流短信平台 |
| 邮件管理 | 邮箱账号、邮件模版、邮件发送日志，支持所有邮件平台       |
| 站内信  | 系统内的消息通知，提供站内信模版、站内信消息          |
| 操作日志 | 系统正常操作日志记录和查询，集成 Swagger 生成日志内容 |
| 登录日志 | 系统登录日志记录查询，包含登录异常           |
| 通知公告 | 系统通知公告信息发布维护                 |
| 敏感词  | 配置系统敏感词，支持标签分组                  |
| 应用管理 | 管理 SSO 单点登录的应用，支持多种 OAuth2 授权方式 |
| 地区管理 | 展示省份、城市、区镇等城市信息，支持 IP 对应城市      |

![功能图](/.image/common/system-feature.png)


### 基础设施

|  功能 | 描述                                           |
|-----|----------------------------------------------|
| 代码生成 | 前后端代码的生成（Java、Vue、SQL、单元测试），支持 CRUD 下载       |
| 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档          |
| 数据库文档 | 基于 Screw 自动生成数据库文档，支持导出 Word、HTML、MD 格式      |
| 表单构建 | 拖动表单元素生成相应的 HTML 代码，支持导出 JSON、Vue 文件         |
| 配置管理 | 对系统动态配置常用参数，支持 SpringBoot 加载                 |
| 定时任务 | 在线（添加、修改、删除)任务调度包含执行结果日志                     |
| 文件服务 | 支持将文件存储到 S3（MinIO、阿里云、腾讯云、七牛云）、本地、FTP、数据库等   | 
| WebSocket | 提供 WebSocket 接入示例，支持一对一、一对多发送方式              | 
| API 日志 | 包括 RESTful API 访问日志、异常日志两部分，方便排查 API 相关的问题   |
| MySQL 监控 | 监视当前系统数据库连接池状态，可进行分析SQL找出系统性能瓶颈              |
| Redis 监控 | 监控 Redis 数据库的使用情况，使用的 Redis Key 管理           |
| 消息队列 | 基于 Redis 实现消息队列，Stream 提供集群消费，Pub/Sub 提供广播消费 |
| Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控           |
| 链路追踪 | 接入 SkyWalking 组件，实现链路追踪                      |
| 日志中心 | 接入 SkyWalking 组件，实现日志中心                      |
| 服务保障 | 基于 Redis 实现分布式锁、幂等、限流功能，满足高并发场景              |
| 日志服务 | 轻量级日志中心，查看远程服务器的日志                           |
| 单元测试 | 基于 JUnit + Mockito 实现单元测试，保证功能的正确性、代码的质量等    |

![功能图](/.image/common/infra-feature.png)

## 技术栈

### 微服务

| 项目                    | 说明                 |
|-----------------------|--------------------|
| `agt-dependencies`  | Maven 依赖版本管理       |
| `agt-framework`     | Java 框架拓展          |
| `agt-server`        | 管理后台 + 用户 APP 的服务端 |
| `agt-module-system` | 系统功能的 Module 模块    |
| `agt-module-member` | 会员中心的 Module 模块    |
| `agt-module-infra`  | 基础设施的 Module 模块    |
| `agt-module-bpm`    | 工作流程的 Module 模块    |
| `agt-module-pay`    | 支付系统的 Module 模块    |
| `agt-module-mall`   | 商城系统的 Module 模块    |
| `agt-module-erp`    | ERP 系统的 Module 模块  |
| `agt-module-crm`    | CRM 系统的 Module 模块  |
| `agt-module-ai`     | AI 大模型的 Module 模块  |
| `agt-module-mp`     | 微信公众号的 Module 模块   |
| `agt-module-report` | 大屏报表 Module 模块     |

### 框架

| 框架                                                                                          | 说明               | 版本         |
|---------------------------------------------------------------------------------------------|------------------|------------|
| [Spring Cloud Alibaba](https://github.com/alibaba/spring-cloud-alibaba)                     | 微服务框架            | 2023.0.1   |
| [Nacos](https://github.com/alibaba/nacos)                                                   | 配置中心 & 注册中心      | 2.3.2      |
| [RocketMQ](https://github.com/apache/rocketmq)                                              | 消息队列             | 5.2.0      |
| [Sentinel](https://github.com/alibaba/sentinel)                                             | 服务保障             | 1.8.6      |
| [XXL Job](https://github.com/xuxueli/xxl-job)                                               | 定时任务             | 2.4.0      |
| [Spring Cloud Gateway](https://github.com/spring-cloud/spring-cloud-gateway)                | 服务网关             | 4.1.0      |
| [Seata](https://github.com/seata/seata)                                                     | 分布式事务            | 1.6.1      |
| [MySQL](https://www.mysql.com/cn/)                                                          | 数据库服务器           | 5.7 / 8.0+ |
| [Druid](https://github.com/alibaba/druid)                                                   | JDBC 连接池、监控组件    | 1.2.23     |
| [MyBatis Plus](https://mp.baomidou.com/)                                                    | MyBatis 增强工具包    | 3.5.7      |
| [Dynamic Datasource](https://dynamic-datasource.com/)                                       | 动态数据源            | 4.3.1      |
| [Redis](https://redis.io/)                                                                  | key-value 数据库    | 5.0 / 6.0  |
| [Redisson](https://github.com/redisson/redisson)                                            | Redis 客户端        | 3.32.0     |
| [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架           | 6.1.10     |
| [Spring Security](https://github.com/spring-projects/spring-security)                       | Spring 安全框架      | 6.3.1      |
| [Hibernate Validator](https://github.com/hibernate/hibernate-validator)                     | 参数校验组件           | 8.0.1      |
| [Flowable](https://github.com/flowable/flowable-engine)                                     | 工作流引擎            | 7.0.0      |
| [Knife4j](https://gitee.com/xiaoym/knife4j)                                                 | Swagger 增强 UI 实现 | 4.5.0      |
| [SkyWalking](https://skywalking.apache.org/)                                                | 分布式应用追踪系统        | 9.0.0      |
| [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin)                       | Spring Boot 监控平台 | 3.6.1      |
| [Jackson](https://github.com/FasterXML/jackson)                                             | JSON 工具库         | 2.17.1     |
| [MapStruct](https://mapstruct.org/)                                                         | Java Bean 转换     | 1.6.3      |
| [Lombok](https://projectlombok.org/)                                                        | 消除冗长的 Java 代码    | 1.18.34    |
| [JUnit](https://junit.org/junit5/)                                                          | Java 单元测试框架      | 5.10.1     |
| [Mockito](https://github.com/mockito/mockito)                                               | Java Mock 框架     | 5.7.0      |

## 快速启动

### 1. 基础设施（必选）

#### 1.1 安装JDK

安装JDK 17/21，最低版本要求JDK 17

#### 1.2 初始化数据库

项目使用 MySQL 存储数据，所以需要启动一个 MySQL 服务，如果是 PostgreSQL、Oracle、SQL Server、DM、大金 等其它数据库，也是可以的。

① 创建一个名字为 agt-cloud 数据库，【只要】 执行对应数据库类型的 sql 目录下的 agt-cloud.sql SQL 文件，进行初始化。

② 默认配置下，MySQL 需要启动在 3306 端口，并且账号是 root，密码是 123456。如果不一致，需要修改 application-local.yaml 配置文件。

#### 1.3 初始化 Redis

项目使用 Redis 缓存数据，所以需要启动一个 Redis 服务。

默认配置下，Redis 启动在 6379 端口，不设置账号密码。如果不一致，需要修改 application-local.yaml 配置文件。

#### 1.4 初始化 Nacos(微服务必选)

项目使用 Nacos 作为注册中心和配置中心，所以需要启动一个 Nacos 服务。

启动完成之后，需要创建 dev 命名空间。

> 注意！新建命名空间时，它的“命名空间ID”、“命名空间名”都要是 dev

### 2. 基础设施（可选）

* RocketMQ(消息队列)
* XXL-Job（分布式定时任务）
* Seata（分布式事务）
* Sentinel（分布式服务保障）
* Elasticsearch（搜索引擎）

### 3. 启动后端项目

#### 3.1 编译项目

直接执行 mvn clean install package '-Dmaven.test.skip=true' 命令

或者使用 IDEA 自带的 Maven 插件，进行项目的编译。

#### 3.2 微服务启动

依次启动各个微服务

##### 3.2.1 启动 gateway 服务

执行 AgtGatewayApplication 类，进行启动。

##### 3.2.2 启动 system  服务

执行 AgtSystemApplication 类，进行启动。

##### 3.2.3 启动 infra 服务

执行 AgtInfraApplication 类，进行启动。

#### 3.3 单体启动模式

在 agt-cloud 微服务项目的根目录，有一个 agt-server 模块

没错，它就是 agt-cloud 微服务项目的【单体启动模式】！主要解决三个好处：

* 后悔药：项目一开始采用了 agt-cloud 微服务架构，结果后续上线发现资源不足，或者实际业务量不大，则可以改成使用 agt-server 单体启动模式部署。
* 开发提速：本地启动 agt-cloud 多个微服务很麻烦，而 agt-server 则可以直接启动一个 agt-server 项目，即可启动所有的微服务，方便开发。
* 架构升级：技术选型时，不确定使用微服务架构还是单体架构，则可以直接使用 agt-cloud 项目，最终按需部署微服务还是单体。

agt-server 的启动非常简单，只需要运行 AgtServerApplication 类即可！默认只开启 system 和 infra 模块。其它模块的开启，参考对应模块的“功能开启”即可！