flowable-devops/WARP.md
dengqichen d840effe9e 提交
2025-10-13 14:04:05 +08:00

5.6 KiB
Raw Permalink Blame History

WARP.md

This file provides guidance to WARP (warp.dev) when working with code in this repository.

一、概览

  • 当前仓库以设计文档为主docs/),目标是实现一个可视化工作流平台(前端 ReactFlow后端 Spring Boot + Flowable 7数据库 MySQL 8
  • 计划中的代码结构(以文档为准):
    • backend/Spring Boot 3 + WebFlux + Flowable + Jakarta EL
    • frontend/React 18 + TypeScript + Vite + AntD + Zustand
    • docs/(架构/后端/前端/落地方案等文档)
  • 统一技术决策MVP数据库 MySQL 8表达式引擎 Jakarta ELJUEL执行策略为“同步执行”关闭全局异步执行器审批节点自然暂停等待条件分支通过 ExclusiveGateway + 条件边实现。

二、常用命令(按子项目执行)

  • 先决条件
    • Java 17+、Node 18+、Docker本地 MySQL/Redis 推荐用容器启动)。
  1. 开发依赖服务MySQL + Redis
  • 使用外部 MySQL不使用 Docker
    • 数据库地址172.22.222.111:3306
    • 数据库名称flowable-devops
    • 用户名root如不同请按实际填写
    • 密码请通过环境变量安全注入SPRING_DATASOURCE_PASSWORD不要写入代码或命令行历史
  • 使用外部 Redis不使用 Docker
    • 地址172.22.222.111:6379
    • 数据库db5spring.redis.database=5
    • 密码请通过环境变量安全注入SPRING_REDIS_PASSWORD不要写入代码或命令行历史
  1. 后端backend/Maven
  • 安装依赖并构建(跳过测试): mvn -q -DskipTests package
  • 运行开发服务(读取 application.yml mvn spring-boot:run
  • 运行全部测试: mvn -q test
  • 仅运行单个测试类: mvn -q -Dtest=ExpressionEngineTest test
  • 仅运行单个测试方法: mvn -q -Dtest=ExpressionEngineTest#testSimpleExpression test
  • 常用环境变量(示例):
    • SPRING_DATASOURCE_URL=jdbc:mysql://172.22.222.111:3306/flowable-devops?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
    • SPRING_DATASOURCE_USERNAME=root
    • SPRING_DATASOURCE_PASSWORD=<请在本地安全设置该环境变量>
    • SPRING_REDIS_HOST=172.22.222.111
    • SPRING_REDIS_PORT=6379
    • SPRING_REDIS_PASSWORD=<请在本地安全设置该环境变量>
    • SPRING_REDIS_DATABASE=5
  1. 前端frontend/Vite
  • 安装依赖: npm i
  • 启动开发服务: npm run dev
  • 构建生产包: npm run build
  • 代码检查ESLint若已配置 npx eslint .
  • 前端 API 基址(示例):

三、端到端开发流程(本地)

  1. 启动 MySQL/Redis见上文 Docker 命令)。
  2. 启动后端:在 backend/ 执行 mvn spring-boot:run。
  3. 启动前端:在 frontend/ 执行 npm run dev默认 http://localhost:3000
  4. 在前端编辑器创建/编辑工作流,保存 JSON后端将 JSON 转 BPMN 并部署 Flowable执行时在审批节点暂停审批完成后继续。

四、关键架构速览(帮助快速理解大图)

  • 前端
    • 画布ReactFlow节点面板 + 配置面板(动态表单 + 字段映射 + 表达式输入)。
    • 字段映射:基于上游节点的 outputSchema 构建字段树;表达式统一为 ${...} 字符串。
    • 主要页面:工作流列表、工作流编辑、执行历史、审批中心。
  • 后端
    • 控制器:/api/workflows创建/更新/执行/历史)、/api/node-types类型/元数据)、/api/tasks审批
    • 转换层JSON → BPMN生成 ServiceTaskdelegateExpression 指向 ${genericNodeExecutor}、UserTask、ExclusiveGateway + 条件 SequenceFlow。
    • 执行GenericNodeExecutor 读取当前 ServiceTask 的 FieldExtensionnodeType/nodeConfig调用对应节点实现WorkflowNode并将节点输入/输出写入流程变量 nodes 与日志表。
    • 表达式Jakarta ELJUEL仅 Map 属性访问;上下文包含 nodes/workflow/env无 ${} 字符串走快路径。
    • 数据:
      • Flowable ACT_* 表(引擎自建)
      • 业务表MySQLworkflow_definitions(definition JSON)、node_types(fields/output_schema JSON)、workflow_executions(input JSON)、node_execution_logs(input/output JSON)
  • 执行策略
    • MVP 同步执行审批User Task自然暂停/恢复;后续迭代再引入全局异步与队列。

五、对未来在仓库内协作的注意事项Agent 关键提示)

  • 仅使用 Jakarta ELJUEL不要切换为 JavaScript 表达式引擎。
  • ServiceTask 一律使用 delegateExpression${genericNodeExecutor}),不要使用 ImplementationType.CLASS避免失去 Spring 注入能力。
  • edge.condition 使用 JUEL 表达式;转换层需在 BPMN 中为条件边设置 conditionExpression。
  • 节点扩展:实现 WorkflowNode 接口,并在 NodeTypeRegistry 注册;确保提供 outputSchema 供前端字段映射使用。
  • 观察性:将每个节点的输入/输出/耗时/状态写入 node_execution_logs便于问题定位与验收性能指标。
  • 数据库相关MySQL 8JSON 字段仅用于存储与读取,不做复杂查询;字符集统一 utf8mb4。

六、文档索引(优先阅读)

  • docs/01-架构总览.md统一到 MySQL + JUEL 的大图)
  • docs/02-后端技术设计.mdFlowable 集成要点、条件分支与执行器修正、MySQL DDL
  • docs/03-前端技术设计.md字段映射/表达式一致性)
  • docs/04-数据模型设计.mdJSON SchemaWorkflowDefinition/Node/Edge/NodeTypeMetadata 等)
  • docs/05-API契约.md/api/workflows、/api/node-types、/api/tasks 的请求/响应)
  • docs/99-最终修正落地方案.mdPM + 架构联合终版,含 PoC 计划与验收标准)