AIOA

AI 原生移动办公系统。项目采用“纵向业务闭环优先”的实施方式,首个里程碑是请假审批闭环。

当前范围

首期只实现:

  • OIDC 登录与当前用户
  • 基础组织、岗位和角色
  • 请假申请、审批、驳回、撤回和流程时间线
  • 附件、站内通知和审计
  • AI 辅助填写请假单、查询流程进度

不在首期实现:全面微服务、多 Agent、自主审批、复杂知识库、生产级 Kubernetes 集群。

仓库结构

backend/       Kotlin + Spring Boot 模块化单体
mobile/        Flutter 移动客户端
admin-web/     React + TypeScript 表单设计与流程配置管理端
ai-service/    Python AI 服务
contracts/     OpenAPI 与事件契约
deploy/        本地与部署配置
docs/          产品、架构和开发文档
scripts/       开发辅助脚本

开发环境

  • JDK 21
  • Docker 28+
  • Docker Compose v2
  • Flutter stable(与当前主机架构一致)
  • Python 3.11+

复制 .env.example.env 后,可使用 docker compose --env-file .env -f deploy/compose/compose.yaml up -d 启动基础依赖。

本地 PostgreSQL 暴露在 127.0.0.1:15432,避免与系统或其他项目常用的 5432 端口冲突。

千问 AI 服务通过 QWEN_API_KEY 环境变量读取密钥。密钥只能放在被 Git 忽略的本地 .env 或部署密钥系统中,不得写入 .env.example、代码、镜像或 Flutter 客户端。启动 AI 服务:

docker compose --env-file .env -f deploy/compose/compose.yaml up -d ai-service

Android 模拟器登录前运行 scripts/dev-android-reverse.sh,使 Keycloak 的固定开发 Issuer http://localhost:8081/realms/aioa 与 Android 回调环境保持一致,并允许访问 MinIO 预签名地址。iOS Simulator 可直接使用默认本机地址。

后端测试:

cd backend
export JAVA_HOME=/usr/local/opt/openjdk@21/libexec/openjdk.jdk/Contents/Home
export GRADLE_USER_HOME=/tmp/aioa-gradle-home
./gradlew --no-daemon test

当前实施范围和验收标准见 docs/product/mvp.md

一键执行本地提交前验证:

./scripts/verify-all.sh

需要同时生成 Android 和 iOS Simulator 构建产物时:

AIOA_FULL_BUILD=1 ./scripts/verify-all.sh

Flutter 已实现 Schema 驱动的请假表单卡片演示,详见 docs/engineering/mobile-schema-forms.md

Web 管理端已实现可视化表单设计、实时移动卡片预览和版本发布。运行与验证方式见 admin-web/README.md

持续集成

仓库根目录的 .gitlab-ci.yml 默认执行:

  • JDK 21 后端测试,并上传 JUnit 报告;
  • Python 3.12 AI 服务编译检查与测试;
  • Flutter 格式检查、静态分析和测试;
  • React 管理端单元测试和生产构建;
  • Android Debug APK 构建与产物归档。

流水线不需要数据库、Keycloak 或千问密钥。iOS 构建需要带 Xcode 的 macOS GitLab Runner,配置 Runner 后按流水线文件末尾的说明启用。

移动推送

移动端使用 Firebase Cloud Messaging,同时承载 Android FCM 与 iOS APNs。生产构建需要分别提供 Firebase 项目的 google-services.jsonGoogleService-Info.plist,后端通过 FIREBASE_CREDENTIALS_FILE 指向 Firebase Admin 服务账号 JSON。凭证文件必须由部署密钥系统挂载,不得提交到仓库。

未配置 Firebase 时,Flutter 会自动降级,站内通知仍然可用;后端推送 outbox 会保留并延迟重试。FlutterFire 当前最低支持 iOS 15,因此项目部署目标已统一调整为 iOS 15。

S
Description
AIOA - All 8 AI Office Automation
Readme 493 KiB
Languages
Kotlin 75.3%
Dart 23.1%
Shell 0.8%
Swift 0.8%