backend/robot-service/README.zh.md
面向 RPA 机器人设计、执行、终端管理、审计与监控的一体化后端服务。
本项目是基于 Spring Boot 的后端服务,提供 RPA 机器人的设计、版本管理、执行编排、计划任务、运行监控、审计与通知等能力。项目已集成单点登录(casdoor)、数据访问(MyBatis-Plus + Druid)、缓存(Redis)、定时任务(Spring Scheduling)、远程调用(OpenFeign)、日志(Logback)等基础设施。
robot8040/api/robot82.3.11.RELEASE2.2.0.RELEASE@EnableFeignClients 已开启)/opt/log/rpa/${spring.application.name}/)com.mysql.cj.jdbc.Driver)openjdk:8-jre-alpinesrc/main/java/com/iflytek/rpa/
├─ RobotApplication.java // 应用启动类(@SpringBootApplication, @EnableFeignClients, @EnableScheduling, @EnableRedisHttpSession, @EnableAsync)
├─ conf/ // 全局配置与基础控制器
│ ├─ ApiContext.java // 简单的请求上下文(tenantId/userId 等)
│ ├─ FeignConfiguration.java // Feign 相关配置(请求头传递等)
│ ├─ MybatisPlusConfig.java // 分页插件等
│ └─ RedisConfig.java // 启用 Redis 事务支持
├─ auth/ // 认证模块:casdoor 集成、用户管理、JWT 过滤等
├─ base/ // 基础元数据模块(原子、流程、参数、模块、分组、全局变量等)
├─ robot/ // 机器人核心:设计、版本、执行、共享变量/文件、资源管理
├─ task/ // 计划任务:任务定义、执行记录、拉取日志等
├─ triggerTask/ // 触发任务:触发规则/任务邮箱等
├─ monitor/ // 监控与统计:历史终端/机器人、统计报表
├─ notify/ // 通知发送
├─ market/ // 市场/应用管理扩展
├─ component/ // 组件管理模块
├─ starter/ // 自定义 starter:通用工具、响应封装、异常处理等
└─ utils/ // 通用工具(分页、时间、ID、HTTP、防抖、监控辅助等)
src/main/resources/
├─ bootstrap.yml // 应用名/端口/上下文、默认 profile
├─ application-local.yml // 本地开发配置
└─ logback-delayed.xml // 日志配置
默认激活 profile:
local(见bootstrap.yml)。请在不同环境下覆盖敏感信息(DB/Redis/casdoor/S3)。示例配置文件中的账号密码仅为占位/示例,务必替换为安全来源(环境变量、K8s Secret 等)。
server.port: 默认 8004server.servlet.context-path: /api/robotspring.datasource.*:驱动、连接池(stat,wall,slf4j 过滤器)、慢 SQL 日志mybatis-plus.mapper-locations: classpath:/mapper/*/*.xmllogic-delete-value: 1 / logic-not-delete-value: 0PaginationInterceptor(见 MybatisPlusConfig)spring.redis.*:库、地址、连接池、超时RedisConfig 里启用 StringRedisTemplate 事务支持redis.open 开关、防抖配置 deBounce.prefix/windowcasdoor.cas-server-context / rest-server-url:casdoor 服务地址casdoor.cas-client-context:当前应用后端上下文地址(注意是后端,不是前端)casdoor.session-filter-exclude / casdoor.access-auth-exclude:登录/鉴权白名单cas.client.context / cas.client.index:登录后跳转/首页allowed.origins:跨域域名白名单report.export.strategy: excel、缓冲/Sheet 名称、文件命名模板amazonaws.s3.url/accessKey/secretKey/bucket/prefix/maxConnections以下仅列出模块级别的基础路由前缀,详细接口可通过源码 @GetMapping/@PostMapping 查看:
/auth*)
/login-status:查询登录态/logout:登出并清理相关数据/user/info:获取当前登录用户信息/robot-*)
/robot-design:创建、重命名、列表、详情、复制、删除、分享/robot-version:同名校验、发布、启用/恢复、列表/robot-execute:执行列表、删除、更新、详情、执行前检查/robot-record:执行记录列表、日志、详情、结果保存、批量删除/robot-shared-var、/robot-shared-file:共享变量/文件管理/robot-manage:资源/部署/转移/版本/执行统计等/task*、/triggerTask)
/task:任务列表、保存、启停、删除、名称校验、下次时间/task-execute:执行状态、列表、批量删除/triggerTask:触发器名称校验、插入/查询/删除/更新、分页等/taskMail:任务邮箱连接、保存、删除/atom、/param、/module、/process、/group、/global、/require、/element 等)/market-*、/application)/his-*)与统计报表/notify)/component*)提示:控制器位于各模块的
controller包下;DAO 继承BaseMapper<T>,位于dao/mapper包;实体与常量在entity/constants包;annotation包含模块自定义注解(若有)。
robot 模块下的 Controller + Service + Dao 组成@EnableScheduling;典型任务:
SharedVarServiceImpl:共享变量每日维护(cron: 1 0 0 * * *)StatisticsServiceImpl:统计报表任务(cron: 0 0 1 * * ?)DeBounceUtils 使用 Redis 构建基于 Key 的防抖窗口(毫秒级),窗口与前缀可在配置项 deBounce.* 调整RedisTemplate.executePipelinedreport.* 下配置ApiContext 暴露 tenantId/userId 设置与获取方法;建议后续结合拦截器或 ThreadLocal 优化隔离先决条件
本地运行
# 1) 替换 application-local.yml 中的数据库/Redis/casdoor/S3 等敏感配置
# 2) 编译打包(缺省已配置 <skipTests>true</skipTests>)
mvn clean package -DskipTests
# 3) 运行
java -jar target/robot-0.0.1-SNAPSHOT.jar --spring.profiles.active=local
# 可选:调整端口/上下文
# --server.port=8040 --server.servlet.context-path=/api/robot
# 构建镜像(确保 target/*.jar 已存在)
docker build -t robot:local .
# 运行(请用环境变量覆盖敏感配置)
docker run -d --name robot \
-p 8040:8040 \
-e SPRING_PROFILES_ACTIVE=prod \
robot:local
注:
Dockerfile基于openjdk:8-jre-alpine镜像,默认会将target/*.jar放置到根目录。 启动命令可在编排中(K8s/Compose)通过CMD或args指定。
controller 只做入参校验与编排,service 承载业务,dao 仅做数据访问,entity 为数据模型AppResponseutils 工具类,优先复用@Valid/@Validated;对公共方法做空值校验session-filter-exclude 与 access-auth-exclude 白名单mybatis-plus.mapper-locations 与 pom.xml 中对 src/main/java/**/*.xml 的资源打包配置RedisConfig 已启用 StringRedisTemplate.setEnableTransactionSupport(true),并在需要的逻辑中正确使用事务report.excel.buffer.size 与 robot.maxLines,或分页导出/opt/log/rpa/ 写入权限;或自定义 Logback 配置