53 lines
2.7 KiB
Markdown
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`。
|