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

97 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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不要写入代码或命令行历史
2) 后端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
3) 前端frontend/Vite
- 安装依赖:
npm i
- 启动开发服务:
npm run dev
- 构建生产包:
npm run build
- 代码检查ESLint若已配置
npx eslint .
- 前端 API 基址(示例):
- 开发VITE_API_BASE_URL=http://localhost:8080
三、端到端开发流程(本地)
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 计划与验收标准)