# 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 计划与验收标准)