# scaffold 项目

# 简介

自用的项目骨架

有任何问题,或者想要的功能,可以在博客首页联系作者

  • 管理后台的电脑端:Vue3 提供 element-plus
  • 后端采用 Spring Boot 多模块架构、MySQL + MyBatis Plus、Redis + Redisson
  • 数据库可使用 MySQL、Oracle、PostgreSQL、SQL Server、MariaDB、国产达梦 DM、TiDB 等
  • 权限认证使用 Spring Security & Token & Redis,支持多终端、多种用户的认证系统,支持 SSO 单点登录
  • 支持加载动态权限菜单,按钮级别权限控制,本地缓存提升性能
  • 支持 SaaS 多租户,可自定义每个租户的权限,提供透明化的多租户底层封装
  • 工作流使用 Flowable,支持动态表单、在线设计流程、会签 / 或签、多种任务分配方式
  • 高效率开发,使用代码生成器可以一键生成前后端代码 + 单元测试 + Swagger 接口文档 + Validator 参数校验
  • 集成微信小程序、微信公众号、企业微信、钉钉等三方登陆,集成支付宝、微信等支付与退款
  • 集成阿里云、腾讯云等短信渠道,集成 MinIO、阿里云、腾讯云、七牛云等云存储服务
  • 集成报表设计器、大屏设计器,通过拖拽即可生成酷炫的报表与大屏
  • 集成 liquibase 实现数据库版本控制

# 项目关系

# 后端项目

项目Star简介
scaffold基于 Spring Boot 多模块架构

# 前端项目

项目Star简介
scaffold-ui-admin基于 Vue3 + element-plus 实现的管理后台

# 内置功能

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

  • 系统功能
  • 基础设施
  • 工作流程
  • 支付系统
  • 会员中心
  • 数据报表
  • 商城系统
  • 微信公众号
  • 数据库版本控制

# 系统功能

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

# 工作流程

功能描述
流程模型配置工作流的流程模型,支持文件导入与在线设计流程图,提供 7 种任务分配规则
流程表单拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件
用户分组自定义用户分组,可用于工作流的审批分组
我的流程查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线
待办任务查看自己【未】审批的工作任务,支持通过、不通过、转发、委派、退回等操作
已办任务查看自己【已】审批的工作任务,未来会支持回退操作
OA 请假作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批

# 支付系统

功能描述
应用信息配置商户的应用信息,对接支付宝、微信等多个支付渠道
支付订单查看用户发起的支付宝、微信等的【支付】订单
退款订单查看用户发起的支付宝、微信等的【退款】订单
回调通知查看支付回调业务的【支付】【退款】的通知结果
接入示例提供接入支付系统的【支付】【退款】的功能实战

# 基础设施

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

# 数据报表

功能描述
报表设计器支持数据报表、图形报表、打印设计等
大屏设计器拖拽生成数据大屏,内置几十种图表组件

# 微信公众号

功能描述
账号管理配置接入的微信公众号,可支持多个公众号
数据统计统计公众号的用户增减、累计用户、消息概况、接口分析等数据
粉丝管理查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作
消息管理查看粉丝发送的消息列表,可主动回复粉丝消息
自动回复自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复
标签管理对公众号的标签进行创建、查询、修改、删除等操作
菜单管理自定义公众号的菜单,也可以从公众号同步菜单
素材管理管理公众号的图片、语音、视频等素材,支持在线播放语音、视频
图文草稿箱新增常用的图文素材到草稿箱,可发布到公众号
图文发表记录查看已发布成功的图文素材,支持删除操作

# 数据库版本控制

功能描述
数据库版本控制系统启动自动检查数据库是否存在,不存在自动建库,初始化项目需要的表
多数据源版本控制支出多数据源的情况下多个版本控制
可扩展数据库目前大部分常用数据库以实现,少部分需要自己实现

# 技术栈

# 模块

项目说明
scaffold-dependenciesMaven 依赖版本管理
scaffold-frameworkJava 框架拓展
scaffold-server管理后台 + 用户 APP 的服务端
scaffold-module-system系统功能的 Module 模块
scaffold-module-infra基础设施的 Module 模块
scaffold-module-bpm工作流程的 Module 模块
scaffold-module-mp微信公众号的 Module 模块
scaffold-module-report大屏报表 Module 模块

# 子模块

父模块子模块模块说明功能说明封装指南
scaffold-frameworkMaven 依赖版本管理
scaffold-spring-boot-starter-bannerBanner 用于在 console 控制台,打印开发文档、接口文档等
scaffold-spring-boot-starter-biz-data-permission数据权限

# 框架

框架说明版本学习指南
Spring Boot应用开发框架2.7.16文档
MySQL数据库服务器5.7 / 8.0+
DruidJDBC 连接池、监控组件1.2.19文档
MyBatis PlusMyBatis 增强工具包3.5.3.2文档
Dynamic Datasource动态数据源3.6.1文档
Rediskey-value 数据库5.0 / 6.0 /7.0
RedissonRedis 客户端3.18.0文档
Spring MVCMVC 框架5.3.24文档
Spring SecuritySpring 安全框架5.7.11文档
Hibernate Validator参数校验组件6.2.5文档
Flowable工作流引擎6.8.0文档
Quartz任务调度组件2.3.2文档
SpringdocSwagger 文档1.6.15文档
Resilience4j服务保障组件1.7.1文档
SkyWalking分布式应用追踪系统8.12.0文档
Spring Boot AdminSpring Boot 监控平台2.7.10文档
JacksonJSON 工具库2.13.3
MapStructJava Bean 转换1.5.5.Final文档
Lombok消除冗长的 Java 代码1.18.30文档
JUnitJava 单元测试框架5.8.2-
MockitoJava Mock 框架4.8.0-
liquibase数据库版本控制框架4.9.1文档

# 项目讲解

# 项目结构和表结构规范

  1. 项目结构

    a

  2. 表结构

    对应的模块对应表前缀, 如系统相关的表,前缀为:system_

    基础设施服务就是: infra_

# 功能权限

基于 RBAC 权限模型(Role-Based Access Control)的角色访问控制

具体说明查看文档:scaffold 项目之功能权限

# 数据权限

# 用户体系

# 三方登陆

# 部署流程

# 后端项目

docker:

dockerfile 方式启动, 如果访问不到国外镜像,可以看这里使用 github 配合阿里云仓库拉取国外镜像

## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性
FROM eclipse-temurin:8-jre
## 创建目录,并使用它作为工作目录
RUN mkdir -p /scaffold-server
WORKDIR /scaffold-server
## 将后端项目的 Jar 文件,复制到镜像中
COPY scaffold-server.jar app.jar
## 设置 TZ 时区
ENV TZ=Asia/Shanghai
## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
ENV JAVA_OPTS="-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom"
## 将配置文件复制到容器中的特定位置
#COPY application.yml application.yml
# 通过环境变量指定配置文件的位置
#ENV SPRING_CONFIG_LOCATION file:application.yml
## 应用参数
ENV ARGS=""
## 暴露后端项目的 48080 端口
EXPOSE 48080
## 启动后端项目
CMD java ${JAVA_OPTS} -jar app.jar $ARGS

目录结构:

-rw-r--r-- 1 root root       676 Jul 26 20:45 application.yml
drwxrwxrwx 2 root root      4096 May  5 21:49 backup
drwxrwxrwx 2 root root      4096 May  5 21:46 build
-rwxrwxrwx 1 root root       548 May  5 23:13 deploy.sh
-rw-r--r-- 1 root root       951 Jul 26 20:37 Dockerfile
-rwxrwxrwx 1 root root       758 May  5 21:34 Dockerfile_bak_20240726
-rw-r--r-- 1 root root 239261495 May 20 21:01 scaffold-server.jar

构建镜像:

docker build -t scaffold-server .

构建进行运维命令

docker restart scaffold-server
docker start scaffold-server
docker stop scaffold-server

# 前端项目

# 报表设计器

# 总结

# 参考资料