# 低代码应用全链路闭环优化 ## 核心设计 ### 概念模型 ``` 业务对象(商机/合同/客户) └── 记录(带状态的单据,如一条商机数据) ├── 状态机:草稿 → 已提交 → 审批中 → 已通过/已驳回 ├── 触发器:事件发生时自动执行动作 │ ├── 事件:新增记录/更新记录/状态变更/字段变化 │ └── 动作:发起流程/推送消息/创建关联记录/调用Webhook ├── 流程绑定:关联已有流程模型,映射表单变量 ├── 消息推送:流程事件/触发器 → 站内信 + 第三方平台(TODO) ├── 报表统计:基于对象数据的聚合展示 └── 权限控制:数据权限 + 按钮权限 ``` ### 业务场景示例(商机管理) ``` 商机录入(填写动态表单) → 触发器:新增记录且状态=已提交时,自动发起审批流程 → 流程变量从表单字段映射(商机名称→title, 金额→amount, 负责人→assignee) → 审批流程执行(部门主管→总监) → 审批通过 → 触发器:状态变更为已通过时 → 推送消息给商机负责人 → 创建跟进记录 → 审批驳回 → 推送消息给提交人 → 报表看板:商机阶段分布/金额汇总/转化率 ``` --- ## Task 1: 数据库结构设计 ### 1.1 触发器规则表 `ai_business_trigger` ```sql -- 核心字段 id, tenant_id, suite_code, object_code, trigger_name, trigger_type (EVENT/SCHEDULE/MANUAL), event_type (RECORD_CREATED/RECORD_UPDATED/STATUS_CHANGED/FIELD_CHANGED), event_condition (JSON: 字段条件表达式), action_type (START_FLOW/SEND_MESSAGE/CREATE_RECORD/UPDATE_FIELD/WEBHOOK), action_config (JSON: 动作配置), status, sort_order, create_by, create_time... ``` ### 1.2 流程绑定变量映射表 `ai_business_flow_bindng` ```sql -- 在 ai_business_binding 中 binding_type=FLOW 时,binding_config 结构增强: { "flowModelKey": "opportunity_approval", "startEvent": "STATUS_CHANGED", "startCondition": {"field": "status", "from": "*", "to": "submitted"}, "variableMapping": [ {"formField": "opportunityName", "flowVariable": "title"}, {"formField": "amountCent", "flowVariable": "amount"}, {"formField": "ownerUserId", "flowVariable": "assignee"} ], "callbackMapping": { "PROCESS_COMPLETED": {"updateField": "status", "value": "approved"}, "PROCESS_REJECTED": {"updateField": "status", "value": "rejected"} } } ``` ### 1.3 消息推送通道表 `ai_business_message_channel` ```sql -- 第三方推送通道框架(留 TODO 实现) id, tenant_id, channel_type (WECHAT_WORK/FEISHU/DINGTALK/WEBHOOK), channel_name, channel_config_ref (引用安全配置), status, create_by, create_time... ``` ### 1.4 业务对象状态机配置 在 `ai_business_object.options` JSON 中增加 `statusMachine` 节点: ```json { "statusMachine": { "enabled": true, "statusField": "status", "states": [ {"value": "draft", "label": "草稿", "color": "default"}, {"value": "submitted", "label": "已提交", "color": "processing"}, {"value": "approving", "label": "审批中", "color": "warning"}, {"value": "approved", "label": "已通过", "color": "success"}, {"value": "rejected", "label": "已驳回", "color": "error"} ], "transitions": [ {"from": "draft", "to": "submitted", "action": "submit", "label": "提交"}, {"from": "submitted", "to": "approving", "trigger": "flow_started"}, {"from": "approving", "to": "approved", "trigger": "flow_completed"}, {"from": "approving", "to": "rejected", "trigger": "flow_rejected"}, {"from": "rejected", "to": "draft", "action": "resubmit", "label": "重新提交"} ] } } ``` **涉及文件:** - 新增 `forge/db/migration/V1.0.4X__add_business_trigger_and_flow_enhancement.sql` --- ## Task 2: 触发器引擎后端实现 ### 2.1 核心服务 - `BusinessTriggerService` - 触发器 CRUD + 启停 - `BusinessTriggerExecutor` - 触发器执行引擎(事件匹配 → 条件评估 → 动作执行) - `BusinessEventPublisher` - 业务事件发布(在 DynamicCrudController 的增删改操作中发布事件) ### 2.2 触发器动作执行器 - `StartFlowAction` - 发起流程(通过 FlowClient 调用) - `SendMessageAction` - 发送消息(站内信 + 第三方通道 TODO) - `CreateRecordAction` - 创建关联记录(调用 DynamicCrudController) - `UpdateFieldAction` - 更新指定字段 - `WebhookAction` - 调用外部 Webhook(TODO 预留) ### 2.3 接口设计 ``` GET /ai/business/trigger/page 触发器列表 GET /ai/business/trigger/:id 触发器详情 POST /ai/business/trigger 新增触发器 PUT /ai/business/trigger 修改触发器 DELETE /ai/business/trigger/:id 删除触发器 PUT /ai/business/trigger/:id/status 启停触发器 POST /ai/business/trigger/:id/test 测试触发器(模拟执行) ``` **涉及文件:** - 新增 `forge-plugin-generator` 下 `businessapp/trigger/` 包 - 修改 `DynamicCrudController` 增加事件发布切面 --- ## Task 3: 流程引擎与业务对象集成 ### 3.1 流程绑定配置接口 - 在业务对象设计器中增加"流程配置"页签 - 支持选择已有流程模型(来自 Flowable) - 支持表单字段 → 流程变量映射配置 - 支持流程回调 → 状态变更映射 ### 3.2 动态流程发起 - `BusinessFlowService` - 从业务对象记录动态发起流程 - 不再需要硬编码 `@FlowBind` 注解,改为运行时读取 `ai_business_binding` 配置 - 支持从动态 CRUD 页面中点击"提交审批"按钮发起 ### 3.3 流程回调处理 - `BusinessFlowCallbackHandler` - 监听流程事件 - 根据 `binding_config.callbackMapping` 自动更新业务记录状态 - 触发后续触发器(状态变更事件) ### 3.4 接口设计 ``` GET /ai/business/flow/bindings/:objectCode 查询对象流程绑定 POST /ai/business/flow/bindings 保存流程绑定配置 GET /ai/business/flow/models 获取可用流程模型列表 POST /ai/business/flow/start 从业务记录发起流程 GET /ai/business/flow/status/:businessKey 查询流程状态 ``` **涉及文件:** - 新增 `forge-plugin-generator` 下 `businessapp/flow/` 包 - 修改 `FlowEventSubscriber` 增加动态回调路由 --- ## Task 4: 消息推送集成 ### 4.1 触发器消息动作 - 触发器的 `SEND_MESSAGE` 动作配置: - 消息模板选择 - 接收人规则(记录创建人/负责人/指定角色/指定人员) - 推送通道(站内信 + 第三方 TODO) ### 4.2 流程事件消息推送 - 流程状态变更时自动推送: - 审批通过 → 推送给提交人 - 审批驳回 → 推送给提交人 - 待办产生 → 推送给审批人 ### 4.3 第三方通道框架(TODO 预留) - `MessageChannelAdapter` 接口定义 - `WechatWorkChannelAdapter` - 企微通道(TODO) - `FeishuChannelAdapter` - 飞书通道(TODO) - `DingtalkChannelAdapter` - 钉钉通道(TODO) - 通道配置使用安全引用,不存明文密钥 **涉及文件:** - 增强 `forge-plugin-message` 的 `SysMessageService` - 新增通道适配器接口和配置 --- ## Task 5: 报表统计集成 ### 5.1 对象统计卡片 - 在业务对象的列表页上方增加统计摘要区域 - 支持配置统计指标(计数/求和/平均值/分组统计) - 配置存储在 `ai_business_binding` 的 `REPORT` 类型绑定配置中 ### 5.2 统计查询接口 ``` GET /ai/business/report/:objectCode/summary 对象统计摘要 ``` - 根据 `binding_config` 中的统计配置,动态生成聚合 SQL - 返回数量、金额汇总、状态分布等 **涉及文件:** - 新增 `businessapp/report/` 包 - 新增统计查询 Service + Controller --- ## Task 6: 权限配置集成 ### 6.1 数据权限 - 业务对象支持配置数据权限策略 - 在 `ai_business_binding` 的 `PERMISSION` 绑定中配置: - 权限维度(用户/部门/角色) - 权限字段映射(ownerUserId / ownerDeptId) - 自动注册到 `sys_data_scope_config` ### 6.2 按钮权限 - 业务对象支持配置操作按钮权限 - 标准权限:新增/编辑/删除/导入/导出/提交审批 - 自定义按钮权限 - 运行时通过 `ai_crud_config.options` 传递到前端 **涉及文件:** - 增强 `BusinessBindingService` 的权限配置处理 - 修改运行态配置生成时注入权限信息 --- ## Task 7: 前端 - 应用中心清理与引擎重组 ### 7.1 移除入口 - `app-center/engines.vue` 中移除"审批引擎""导入导出引擎"卡片 - 审批统一归入"流程引擎"展示 - 导入导出作为对象基础能力,不在引擎中心单独展示 - 移除 `app-center/mobile.vue` 菜单入口(代码保留) - 移除 `app-center/integration.vue` 菜单入口(代码保留) - 移除 `ai_business_binding.binding_type` 中 APPROVAL/IMPORT/EXPORT/MOBILE/INTEGRATION 在前端的独立展示 ### 7.2 引擎中心保留 - 流程引擎(含审批场景) - 消息引擎(含第三方推送 TODO) - 报表引擎(统计卡片 + 大屏嵌入) - 触发器引擎 - 权限引擎 **涉及文件:** - 修改 `app-center/engines.vue` - 修改 `app-center/index.vue` 导航 - 修改路由配置 --- ## Task 8: 前端 - 触发器配置 UI ### 8.1 触发器管理页 - 在业务对象详情中增加"自动化/触发器"页签 - 支持新增/编辑/删除/启停触发器 - 可视化配置:触发事件 + 条件 + 动作 ### 8.2 触发器配置表单 - 事件选择:新增记录/更新记录/状态变更/字段变化 - 条件配置:字段条件表达式(简单表达式构建器) - 动作选择:发起流程/推送消息/创建记录/更新字段/Webhook(TODO) - 动作配置:根据动作类型展示不同配置面板 **涉及文件:** - 新增 `views/app-center/components/TriggerPanel.vue` - 新增 `views/app-center/components/TriggerConfigDrawer.vue` --- ## Task 9: 前端 - 流程绑定与发起 ### 9.1 流程配置面板 - 在业务对象详情中增加"流程配置"页签 - 流程模型选择器(从已发布的流程模型中选择) - 变量映射配置(表单字段 ↔ 流程变量) - 回调映射配置(流程结果 → 记录状态) ### 9.2 运行态"提交审批"按钮 - 在 AiCrudPage 的操作列/工具栏中增加"提交审批"按钮 - 按钮仅在对象绑定了流程且记录状态满足条件时显示 - 点击后调用 `/ai/business/flow/start` ### 9.3 流程状态展示 - 在记录详情中展示当前流程状态、审批进度 - 支持查看审批记录和审批意见 **涉及文件:** - 新增 `views/app-center/components/FlowBindingPanel.vue` - 修改 AiCrudPage 配置,支持流程操作按钮 --- ## Task 10: 前端 - 消息推送配置 + 报表统计 + 权限 ### 10.1 消息推送配置 - 触发器动作中"发送消息"的配置面板 - 消息模板选择 + 接收人规则配置 - 第三方通道选择(显示 TODO 状态) ### 10.2 报表统计区域 - 在对象列表页上方增加可配置的统计摘要卡片 - 支持配置展示哪些聚合指标 ### 10.3 权限配置面板 - 在业务对象详情中增加"权限"页签 - 数据权限策略配置 - 操作按钮权限配置 **涉及文件:** - 增强现有面板组件 - 修改 AiCrudPage 展示统计卡片逻辑 --- ## Task 11: 集成验证 - 后端编译:`cd forge && mvn clean compile -DskipTests` - 前端构建:`cd forge-admin-ui && pnpm build` - 业务场景走通:商机录入 → 提交 → 触发器发起流程 → 流程回调更新状态 → 推送消息 --- ## 实施优先级 | 优先级 | Task | 原因 | |--------|------|------| | P0 | Task 1(数据库) | 基础依赖 | | P0 | Task 7(UI清理) | 快速可见效果 | | P1 | Task 2(触发器后端) | 核心引擎 | | P1 | Task 3(流程集成) | 核心链路 | | P1 | Task 8(触发器前端) | 核心交互 | | P1 | Task 9(流程前端) | 核心交互 | | P2 | Task 4(消息推送) | 第三方部分为TODO | | P2 | Task 5(报表统计) | 锦上添花 | | P2 | Task 6(权限集成) | 复用现有能力 | | P2 | Task 10(其余前端) | 依赖后端完成 | | P3 | Task 11(集成验证) | 最终验证 | --- ## 技术约束 - 不重写 DynamicCrudController 和 AiCrudPage - 不重写 Flowable 底层,只做业务层桥接 - 第三方消息推送只建框架接口,具体实现留 TODO - 触发器只做轻量事件驱动,不做复杂规则引擎 - 所有新增数据库表遵循 Flyway + 防重复规范 - 单据状态=业务对象记录状态字段,无需新建独立概念