## 简介
    锋巢低代码一体式集成框架，是一个融合了通用管理平台众多基础模块的，一体式集成建站框架，框架提供了落地即用的完善权限体系、动态菜单体系、日志体系、
    字典体系等等，支持加载动态权限菜单，按钮级别权限控制，Redis 缓存提升性能，高效率开发，使用代码生成器可以一键生成 Java、Vue 前后端代码、
    SQL 脚本、接口文档，支持单表、树表、主子表。帮助开发者解决了管理类系统 90% 的冗余问题，能让开发者更专注于业务打磨，极大的缩短业务开发周期。


## 架构图
系统整体架构如下:
![架构图](./.image/架构.png)
  Java 后端基于JDK 17 + Spring Boot 3.0.2开发，采用 Spring Boot 多模块架构、MySQL + MyBatis Plus、Redis + Redisson。
* 消息队列可使用 Event、Redis、RabbitMQ、Kafka、RocketMQ 等
* 权限认证使用 Spring Security & Token & Redis，支持多终端、多种用户的认证系统，支持 SSO 单点登录
* 支持 SaaS 多租户，可自定义每个租户的权限，提供透明化的多租户底层封装
* 实时通信，采用 Spring WebSocket 实现，内置 Token 身份校验，支持 WebSocket 集群
* 集成阿里云、腾讯云等短信渠道，集成 MinIO、阿里云、腾讯云、七牛云等云存储服务
* 使用 Resilience4j 组件，实现服务保障包括(熔断器、限流器、舱壁隔离、重试、限时器)，集成lock4j实现轻量级分布式锁，实现幂等组件防止重复提交
* 数据权限，行级权限数据过滤。可灵活配置，通过自定义规则实现过滤条件
* 通过注解AOP的方式实现操作日志记录，集成 Swagger 生成日志内容记录用户的操作行为
* 基于easyexcel，实现通用的excel导入导出
* 任务模块目前只实现基于quartz的任务调度，通过quartz来管理项目内的任务
* 使用 SkyWalking 组件，作为链路追踪、日志中心，通过Spring Boot Admin监控项目运行状态

## 项目关系
锋巢低代码平台底座由两个项目组成。

nest-lcdp-framework：通用组件封装，集成第三方依赖

nest-lcdp-boot：业务功能模块业务逻辑封装
项目各模块依赖如下：

![项目关系](./.image/nest2.0依赖.png)
锋巢低代码平台底座通过对一些通用的业务模块封装和第三依赖集成扩展，实现系统组件starter。业务模块根据需求可插拔集成系统组件，在组件的基础上实现业务功能快速开发，构建业务系统。

整体设计如下：

![模块设计](./.image/模块设计.png)

## 业务模块
### 系统管理
| 功能   | 描述 |
|------| ------ |
| 用户管理 | 用户是系统操作者，该功能主要完成系统用户配置 |
| 角色管理 | 	配置系统菜单、操作权限、按钮权限标识等，本地缓存提供性能 |
| 菜单管理 | 用户是系统操作者，该功能主要完成系统用户配置 |
| 部门管理 | 配置系统组织机构（公司、部门、小组），树结构展现支持数据权限 |
| 岗位管理 | 配置系统用户所属担任职务 |
| 租户管理 | 配置系统租户，支持 SaaS 场景下的多租户功能 |
| 租户套餐 | 配置租户套餐，自定每个租户的菜单、操作、按钮的权限 |
| 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 |
| 短信管理 | 短信渠道、短息模板、短信日志，对接阿里云、腾讯云等主流短信平台 |
| 邮件管理 | 邮箱账号、邮件模版、邮件发送日志，支持所有邮件平台|
| 站内信  | 系统内的消息通知，提供站内信模版、站内信消息 |
| 操作日志 | 系统正常操作日志记录和查询，集成 Swagger 生成日志内容 |
| 登录日志 | 系统登录日志记录查询，包含登录异常 |
| 错误码管理 | 系统所有错误码的管理，可在线修改错误提示，无需重启服务 |
| 通知公告 | 系统通知公告信息发布维护 |
| 应用管理 | 管理 SSO 单点登录的应用，支持多种 OAuth2 授权方式 |

### 基础设施
| 功能        | 描述 |
|-----------| ------ |
| 代码生成      |前后端代码的生成（Java、Vue、SQL、单元测试），支持 CRUD 下载|
| 数据源配置      |连接数据源，查询表信息|
| API接口文档   |基于 Swagger 自动生成相关的 RESTful API 接口文档|
| 数据库文档     |基于 Screw 自动生成数据库文档，支持导出 Word、HTML、MD 格式|
| 配置管理      |	对系统动态配置常用参数，支持 SpringBoot 加载|
| 文件管理	     |支持将文件存储到 S3（MinIO、阿里云、腾讯云、七牛云）、本地、FTP、数据库等|
| API 日志    |	包括 RESTful API 访问日志、异常日志两部分，方便排查 API 相关的问题|
| MySQL 监控  |	监视当前系统数据库连接池状态，可进行分析SQL找出系统性能瓶颈|
| Redis 监控  |	监控 Redis 数据库的使用情况，使用的 Redis Key 管理|
| Java 监控   |	基于 Spring Boot Admin 实现 Java 应用的监控|
| 监控平台      |	接入 SkyWalking 组件，实现链路追踪|

## 功能模块
### 项目结构
nest-lcdp-boot:

![nest-lcdp-boot](./.image/nest-lcdp-boot结构.png)


### 模块设计
#### 1.SpringWeb整合 nest-lcdp-boot-web-starter
对springWeb功能的封装和扩展主要功能如下：
* http请求日志的记录：在ApiAccessLogFilter类中我们封装了对http请求访问日志和报错日志的记录。
* 全局异常的处理：在GlobalExceptionHandle类中封装了对全局异常的处理。
* 接口返回内容的脱敏处理：在desensitize包下封装了脱敏功能，支持 JSON 返回数据时，将邮箱、手机等字段进行脱敏
* 基于 Swagger + Knife4j 实现 API 接口文档，集成jsoup防止XSS攻击

添加http请求前缀:
在com.cico.nest.lcdp.boot.web.config.LcdpWebAutoConfiguration#configurePathMatch
中根据不同的业务请求添加不同的请求前缀。
![http请求前缀](./.image/http请求前缀.png)

#### 2.租户 nest-lcdp-boot-tenant-starter  
租户模块基于mybatis-plus的TenantLineInnerInterceptor拦截器实现。

com.cico.nest.lcdp.boot.tenant.core.db.TenantDatabaseInterceptor实现了mybatis-plus的TenantLineHandler
![租户](./.image/租户.png)

基于ignoreTable方法扩展了 com.cico.nest.lcdp.boot.tenant.core.aop.TenantIgnore 注解，使用此注解在程序运行时忽略租户逻辑。

#### 3.用户权限认证 nest-lcdp-boot-security-starter
基于SpringSecurity实现安全认证功能，校验用户的登录信息。


## 运行环境&快速启动
项目启动依赖:SpringBoot3.0.2+JDK17+Mysql8.0+Redis
执行以下步骤启动项目：
* 执行sql文件夹下init.sql
* 在配置文件中修改数据源配置和redis配置
* 在nest-lcdp-boot-server模块中执行LcdpServerApplication启动类

## 开发规范

### 新建业务模块
在lcdp-code模块下新建业务模块，例如：lcdp-code-fbi，在新建的模块中编写业务代码。

![新建业务模块](./.image/新建业务模块.png)

### 引入pom依赖
在新建的业务模块pom文件中引入lcdp-core-system和lcdp-core-infra两个模块

![引入pom依赖](./.image/引入pom依赖.png)

### 修改项目启动依赖
修改lcdp-server模块pom文件的依赖，修改为业务模块
![修改项目启动依赖](./.image/修改项目启动依赖.png)

### 版本说明
V1-20241031 是交接卫首时他开发的第一版
V2-20241101 是初步融合隧道管控系统的版本
V2-20250320 第二版封板  
