97 lines
5.6 KiB
Markdown
97 lines
5.6 KiB
Markdown
# 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 EL(JUEL);执行策略为“同步执行”(关闭全局异步执行器),审批节点自然暂停等待;条件分支通过 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
|
||
- 数据库:db5(spring.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,生成 ServiceTask(delegateExpression 指向 ${genericNodeExecutor})、UserTask、ExclusiveGateway + 条件 SequenceFlow。
|
||
- 执行:GenericNodeExecutor 读取当前 ServiceTask 的 FieldExtension(nodeType/nodeConfig),调用对应节点实现(WorkflowNode),并将节点输入/输出写入流程变量 nodes 与日志表。
|
||
- 表达式:Jakarta EL(JUEL),仅 Map 属性访问;上下文包含 nodes/workflow/env;无 ${} 字符串走快路径。
|
||
- 数据:
|
||
- Flowable ACT_* 表(引擎自建)
|
||
- 业务表(MySQL):workflow_definitions(definition JSON)、node_types(fields/output_schema JSON)、workflow_executions(input JSON)、node_execution_logs(input/output JSON)
|
||
- 执行策略
|
||
- MVP 同步执行;审批(User Task)自然暂停/恢复;后续迭代再引入全局异步与队列。
|
||
|
||
五、对未来在仓库内协作的注意事项(Agent 关键提示)
|
||
- 仅使用 Jakarta EL(JUEL);不要切换为 JavaScript 表达式引擎。
|
||
- ServiceTask 一律使用 delegateExpression(${genericNodeExecutor}),不要使用 ImplementationType.CLASS,避免失去 Spring 注入能力。
|
||
- edge.condition 使用 JUEL 表达式;转换层需在 BPMN 中为条件边设置 conditionExpression。
|
||
- 节点扩展:实现 WorkflowNode 接口,并在 NodeTypeRegistry 注册;确保提供 outputSchema 供前端字段映射使用。
|
||
- 观察性:将每个节点的输入/输出/耗时/状态写入 node_execution_logs,便于问题定位与验收性能指标。
|
||
- 数据库相关:MySQL 8;JSON 字段仅用于存储与读取,不做复杂查询;字符集统一 utf8mb4。
|
||
|
||
六、文档索引(优先阅读)
|
||
- docs/01-架构总览.md(统一到 MySQL + JUEL 的大图)
|
||
- docs/02-后端技术设计.md(Flowable 集成要点、条件分支与执行器修正、MySQL DDL)
|
||
- docs/03-前端技术设计.md(字段映射/表达式一致性)
|
||
- docs/04-数据模型设计.md(JSON Schema:WorkflowDefinition/Node/Edge/NodeTypeMetadata 等)
|
||
- docs/05-API契约.md(/api/workflows、/api/node-types、/api/tasks 的请求/响应)
|
||
- docs/99-最终修正落地方案.md(PM + 架构联合终版,含 PoC 计划与验收标准)
|