Files
2026-07-18 08:57:45 +08:00

53 lines
2.7 KiB
Markdown

# Backend
Kotlin + Spring Boot 模块化单体。计划模块:`boot``identity``organization``authorization``workflow``form``approval``document``notification``ai-orchestration``audit`
模块必须通过应用接口协作,不能直接访问其他模块拥有的表。
## 本地构建
```bash
export JAVA_HOME=/usr/local/opt/openjdk@21/libexec/openjdk.jdk/Contents/Home
export GRADLE_USER_HOME=/tmp/aioa-gradle-home
./gradlew test
```
本机默认 `~/.gradle` 原生缓存存在加载问题,因此当前建议为项目构建显式设置 `GRADLE_USER_HOME`
## 当前能力
- Spring Boot 3.5.3 / Kotlin 2.1.21 / JDK 21
- OAuth2 Resource Server,健康检查匿名可访问,业务 API 默认要求认证
- `X-Trace-Id` 接收、校验、生成、响应回传与日志上下文
- RFC 9457 `application/problem+json` 风格的统一异常处理
- PostgreSQL、jOOQ 与 Flyway
- 基础 Schema 和审计事件表迁移
- 租户、用户、部门、岗位、任职关系和业务角色模型
- `/api/v1/me` 根据 JWT 租户与 Subject 查询 OA 权威用户数据
- 请假草稿创建、修改、本人查询和列表
- UUIDv7、写入幂等、租户隔离和乐观锁冲突处理
- 请假提交、撤回、状态时间线与事务内审计
- Flowable 7.2 部门主管审批 BPMN、待办、批准和驳回
- 复杂流程安全边界:中间串行/并行任务不提前结束业务申请
- 条件串行流程:不超过 24 小时由主管审批,超过 24 小时增加 OA 管理员复核
- 并行会签:超过 24 小时的年假由 OA 与 HR 同时复核,全部同意才通过
Flowable 开发环境自动维护 `flowable` Schema。生产环境必须设置 `FLOWABLE_SCHEMA_UPDATE=false`,并通过受控数据库变更流程管理 Flowable 表结构。
## 开发身份
本地 Keycloak Realm 为 `aioa`,移动端公共客户端为 `aioa-mobile`,启用 Authorization Code + PKCE。为了便于本地联调,还暂时启用了 Direct Access Grant。
开发环境的 OIDC Issuer 固定为 `http://localhost:8081/realms/aioa`;客户端和后端不能混用 `127.0.0.1`,因为 JWT Issuer 必须完全一致。
| 用户名 | 密码 | 角色 |
|---|---|---|
| `employee` | `Employee123!` | 普通员工 |
| `manager` | `Manager123!` | 员工、部门主管 |
| `admin` | `Admin123!` | 员工、OA 管理员 |
| `hr` | `HrReviewer123!` | 员工、人力资源复核人 |
这些凭据只允许用于本地开发,生产 Realm 不得导入测试用户,也不得启用密码模式。
PostgreSQL 使用版本化开发卷 `postgres-data-v1`,避免复用其他项目或旧凭据初始化的数据目录。切换卷版本不会删除旧卷。
开发数据库通过宿主机端口 `15432` 访问,容器内部仍使用 PostgreSQL 默认端口 `5432`