# acp-admin-standalone **Repository Path**: zhangbinhub/acp-admin-standalone ## Basic Information - **Project Name**: acp-admin-standalone - **Description**: 使用 Kotlin 语言编写,基于 Spring Boot 的微服务架构(单机版)。该项目是前后端分离中的"后端部分" - **Primary Language**: Kotlin - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 10 - **Forks**: 2 - **Created**: 2022-03-04 - **Last Updated**: 2025-06-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: Kotlin, SpringBoot, java17 ## README # acp-admin-standalone ###### v2.8.1 [版本更新日志](doc/version_history.md) - 使用Application Construction Platform 应用构建平台作为脚手架 - 基于 Spring Boot 的单机版,基于 Spring Cloud 版本请查看[这里](https://gitee.com/zhangbinhub/acp-admin-cloud) - 该项目是前后端分离架构中的“后端部分”。[前端工程](https://gitee.com/zhangbinhub/acp-admin-standalone-web) ## 相关组件版本 - [Spring Boot 3.4.6](https://projects.spring.io/spring-boot) - [Acp 2025.4.1](https://gitee.com/zhangbinhub/acp) - [sensitive](https://github.com/houbb/sensitive) ## 技术栈 | 分类 | 组件 | Spring技术栈 | |------|-----------|--------------------------------------------------------| | 构建工具 | - | Gradle 8.6+ | | 开发语言 | JVM | 17+ | | | Java | 17+ | | | Kotlin | 2.1+ | | Core | 日期时间处理 | Joda Time | | | UUID | [uuid-creator](https://github.com/f4b6a3/uuid-creator) | | | 加解密库 | bouncycastle | | | PDF处理 | itextpdf
html2pdf | | | 文件压缩 | Zip4j | | Boot | WEB服务 | Undertow | | | http工具类 | RestClient
WebClient | | | 日志框架 | slf4j
logback | | | Json处理 | Jackson | | | Xml处理 | Jackson | | | ORM框架 | 按需引入,例如:Hibernate (JPA) | | | Api文档 | [Knife4j(国产)](https://doc.xiaominfo.com/)
Openapi3 | | | 安全框架 | Spring Security | | | 资源服务 | spring-boot-starter-oauth2-resource-server | | | 认证服务 | spring-boot-starter-oauth2-authorization-server | | | 认证协议 | Oauth 2.0/2.1 | | | WebSocket | spring-boot-starter-websocket | | | TCP/UDP | Netty | | | 校验 | spring-boot-starter-validation | | | 工作流引擎 | [warm-flow(国产)](https://warm-flow.dromara.org/) | ## 一、gradle 脚本配置及使用 ### (一)配置文件 ##### 1.[gradle/dependencies.gradle](gradle/dependencies.gradle) 定义外部依赖版本号 ##### 2.[gradle/commonTask.gradle](gradle/commonTask.gradle) 公共自定义任务配置,适用于所有项目模块 ##### 3.[gradle/application.gradle](gradle/application.gradle) 应用模块公共配置 ##### 4.[settings.gradle](settings.gradle) 定义项目/模块结构 ##### 5.[project.properties](project.properties) gradle全局参数: - gradleVersion:gradle版本号 - group:对应打包时的最外层groupid,最终的groupid还会加上模块路径,例如`groupid.acp.core` - version:版本号 - encoding:编译字符集 - mavenCentralUrl:maven中央仓库地址 - javaVersion:jdk版本号 ##### 5.[build.gradle](build.gradle) 公共构建脚本 ### (二)自定义任务 - clearPj 清理所有输出文件 - release 编译、打包并输出 - 如需编译打包对应环境,命令中使用参数 active,例如 ``` gradlew project:release -Pactive=test ``` - buildImage 通过```Dockerfile```打包镜像 - pushImage 通过```Dockerfile```打包镜像并上传 ### (三)升级命令 ``` gradlew wrapper --gradle-distribution-url=https://mirrors.cloud.tencent.com/gradle/gradle-8.13-all.zip ``` ## 二、工程说明 - 工程全局默认使用 UTF-8 字符集 - gradle 目录下为相关配置文件 - deploy 部署文件 - 服务[docker/docker-compose.yaml](deploy/docker/docker-compose.yaml) - web[web/docker-compose.yaml](deploy/web/docker-compose.yaml) - swagger url : /doc.html ## 三、启停 SpringBoot 应用 - [启停脚本模板(Linux)](doc/script/server.model) - [启停脚本(windows)](doc/script/server.bat),根据实际情况修改第1行末尾需要执行的 jar 名称,和SpringBoot应用的 .jar 放在同一路径下 - windows:修改[server.bat](doc/script/server.bat)内相关参数后,直接运行即可 - Linux 命令: | 命令 | 描述 | |---------------------|----------| | ./server.sh | 查看可用参数 | | ./server.sh status | 查看系统运行状态 | | ./server.sh start | 启动应用 | | ./server.sh stop | 停止应用 | | ./server.sh restart | 重启应用 | ## 四、说明 - 统一认证服务,集成 oauth2 - 提供全套权限体系服务,包含客户端应用管理、用户管理、机构管理、角色管理、权限管理、token管理、运行参数管理等 | url | 描述 | |---------------|---------------| | /server/token | 获取token,无认证保护 | [查看认证过程](doc/auth/oauth认证.md) ##### (一)数据初始化 首次启动时,如果必要的系统资源和超级管理员数据不存在,则会自动进行初始化 ##### (二)接口功能 提供生成token、验证token、应用管理、机构管理、参数管理、角色管理、用户管理、菜单管理、权限功能管理等接口,接口详情请在浏览器中访问 /doc.html 页面 ##### (三)运行参数 | 名称 | 值 | 描述 | 备注 | |-------------------------------|------------|-----------------------------------------------------------------------|------------------------| | PASSWORD_COMPLEXITY_POLICY | 0 | 密码复杂度策略;0:不限制,1:数字+字母,2:数字+字母+英文特殊符号`~!@#$%^&*()+=|{}':;,\"[].<> | 默认0 | | PASSWORD_UPDATE_INTERVAL_TIME | 7776000000 | 修改密码间隔时间,单位:毫秒 | 密码过期之后,会要求强制修改密码;默认90天 | ##### (四)自定义认证方式 - 1、新建 AuthenticationToken,参考参考[OauthUserPasswordAuthenticationRequest](src/main/kotlin/io/gitee/zhangbinhub/admin/authentication/OauthUserPasswordAuthenticationRequest.kt) - 2、新建转换器 AuthenticationConverter,参考[OauthUserPasswordAuthenticationConverter](src/main/kotlin/io/gitee/zhangbinhub/admin/authentication/OauthUserPasswordAuthenticationConverter.kt) - 3、新建提供者 AuthenticationProvider,参考[OauthUserPasswordAuthenticationProvider](src/main/kotlin/io/gitee/zhangbinhub/admin/authentication/OauthUserPasswordAuthenticationProvider.kt) - 4、AuthorizationServerConfiguration 中加入对应配置 ## 五、环境变量及启动参数 | 变量名 | 描述 | 默认值 | 说明 | |--------------------|---------|---------------------------------|------------------------------------------------------------------------------------------------| | JAVA_TOOL_OPTIONS | JVM启动参数 | | 该环境变量在容器部署时使用 | | acp_profile_active | 激活的配置环境 | dev | 服务器部署时建议java启动命令加入参数 -Dacp_profile_active 或 --acp_profile_active;容器部署时指定环境变量即可 | | acp_server_port | 服务启动端口 | 9090 | 服务器部署时建议java启动命令加入参数 -Dacp_server_port 或 --acp_server_port;容器部署时指定环境变量即可。服务不需要外部直接访问时,建议保持默认值。 | | acp_log_path | 日志路径 | logs/${spring.application.name} | 服务器部署时建议java启动命令加入参数 -Dacp_log_path 或 --acp_log_path;容器部署时指定环境变量即可 | | db_url | 数据库连接 | | | | db_username | 数据库用户名 | | | | db_password | 数据库密码 | | | ## 六、打包OCI镜像 - buildImage - bootBuildImage(实验阶段) - pushImage ## 七、工作流引擎 ##### (一)固定必要的流程变量,自定义变量不能与之重复 - startUserId - 流程发起人 - title - 流程标题 - description - 流程描述 ##### (二)自定义待办通知开发 ###### 待办生成通知 新建通知处理类,包名io.gitee.zhangbinhub.admin.workflow.notify,继承 ```io.gitee.zhangbinhub.admin.base.PendingCreatedNotify``` ,实现方法 ``` @Throws(WebException::class) fun doTaskNotify(definition: Definition, instance: Instance, task: Task, userIdList: List) ``` 参考[LogPendingCreatedNotify](src/main/kotlin/io/gitee/zhangbinhub/admin/workflow/notify/LogPendingCreatedNotify.kt) ###### 待办完成通知 新建通知处理类,包名io.gitee.zhangbinhub.admin.workflow.notify,继承 ```io.gitee.zhangbinhub.admin.base.PendingFinishedNotify``` ,实现方法 ``` @Throws(WebException::class) fun doTaskNotify(definition: Definition, instance: Instance, task: Task, userIdList: List) ``` 参考[LogPendingFinishedNotify](src/main/kotlin/io/gitee/zhangbinhub/admin/workflow/notify/LogPendingFinishedNotify.kt)