status: proposed created: 2026-06-01 拆分顺序:边界确认 → 数据模型 → 后端协议 → 流程运行 → 触发器动作 → 消息/报表/权限 → 前端配置入口 → 示例验收 → 构建归档 → Phase 9 运行态 BUG 与配置体验优化 → Phase 10 定时触发闭环 原则:每个任务可独立提交;查询 SQL 写 Mapper XML;分页参数使用
pageNum/pageSize;内置数据tenant_id=1;Flyway 脚本必须防重复;普通业务用户不直接看到 JSON/Schema/configKey。
lowcode-business-app-platform-business-closure 已完成任务,只在新变更下继续推进。documentStatus / document_status,允许高级模式映射到已有字段。TODO 执行状态和日志,不做真实网络请求。| 阶段 | 目标 | 包含任务 | 交付结果 |
|---|---|---|---|
| Phase 0 | 边界冻结 | Task 0 | 消除待澄清项,确认本阶段硬边界 |
| Phase 1 | 数据模型 | Task 1-2 | 单据配置、流程实例关联、菜单收敛脚本 |
| Phase 2 | 后端协议 | Task 3-5 | 单据配置、单据运行态、流程运行接口 |
| Phase 3 | 流程闭环 | Task 6-7 | 手动/触发器发起流程、结果回写、审批兼容层 |
| Phase 4 | 触发器闭环 | Task 8-10 | XML 查询、场景模板、创建记录/更新字段/Webhook TODO |
| Phase 5 | 消息报表权限 | Task 11-13 | 站内消息、三方通道 TODO、业务指标、按钮权限 |
| Phase 6 | 前端入口 | Task 14-18 | 入口收敛、单据设置、流程动作、触发器、报表页面 |
| Phase 7 | 示例验收 | Task 19-20 | 商机闭环、离职申请闭环 |
| Phase 8 | 验证归档 | Task 21-22 | 编译构建、Spec/Task 回填 |
| Phase 9 | BUG 与体验优化 | Task 23-33 | 动态菜单选中态、填报入口、编号规则、主流程合并、变量候选、自动发起按钮、触发器前置对象、闭环步骤条 |
| Phase 10 | 定时触发闭环 | Task 34 | 低频扫描、批量上限、到期字段筛选、同日去重、执行日志 |
| Task | 阶段 | 名称 | 状态 | 优先级 |
|---|---|---|---|---|
| Task 0 | Phase 0 | 业务边界和待澄清项确认 | completed | P0 |
| Task 1 | Phase 1 | 单据和流程关联 Flyway 脚本 | completed | P0 |
| Task 2 | Phase 1 | 单据与流程关联实体、Mapper、VO/DTO | completed | P0 |
| Task 3 | Phase 2 | 单据配置后端接口 | completed | P0 |
| Task 4 | Phase 2 | 单据运行态后端接口 | completed | P0 |
| Task 5 | Phase 2 | 流程绑定后端协议收敛 | completed | P0 |
| Task 6 | Phase 3 | 真实发起流程和流程实例关联 | completed | P0 |
| Task 7 | Phase 3 | 流程结果回写与审批兼容层 | completed | P0 |
| Task 8 | Phase 4 | 触发器查询 XML 化和配置校验 | completed | P0 |
| Task 9 | Phase 4 | 触发器场景模板与变量映射协议修复 | completed | P0 |
| Task 10 | Phase 4 | 触发器动作执行闭环 | completed | P0 |
| Task 11 | Phase 5 | 消息推送和第三方通道 TODO 适配 | completed | P1 |
| Task 12 | Phase 5 | 业务报表指标后端能力 | completed | P1 |
| Task 13 | Phase 5 | 数据权限与按钮权限摘要 | completed | P1 |
| Task 14 | Phase 6 | 应用中心和引擎中心入口收敛 | completed | P0 |
| Task 15 | Phase 6 | 前端 API 与单据设置面板 | completed | P0 |
| Task 16 | Phase 6 | 流程与自定义操作前端配置 | completed | P0 |
| Task 17 | Phase 6 | 触发器场景化前端配置 | completed | P0 |
| Task 18 | Phase 6 | 业务报表看板前端展示 | completed | P1 |
| Task 19 | Phase 7 | CRM 商机闭环初始化和验收 | completed | P0 |
| Task 20 | Phase 7 | 离职申请闭环初始化和验收 | completed | P1 |
| Task 21 | Phase 8 | 编译、构建、接口和页面验证 | completed | P0 |
| Task 22 | Phase 8 | Spec、任务和验收记录回填 | completed | P0 |
| Task 23 | Phase 9 | 动态应用菜单归属和 open-info 协议 | completed | P0 |
| Task 24 | Phase 9 | 前端菜单选中态和应用入口跳转稳定化 | completed | P0 |
| Task 25 | Phase 9 | 运行态打开模式和单据填报入口 | completed | P0 |
| Task 26 | Phase 9 | 单据编号规则和状态映射后端协议 | completed | P0 |
| Task 27 | Phase 9 | 单据设置面板体验重构 | completed | P0 |
| Task 28 | Phase 9 | 主流程配置合并和兼容迁移 | completed | P0 |
| Task 29 | Phase 9 | 流程变量候选项和自动映射建议 | completed | P0 |
| Task 30 | Phase 9 | 流程绑定面板和标题模板体验重构 | completed | P0 |
| Task 31 | Phase 9 | 运行态自动发起流程按钮 | completed | P0 |
| Task 32 | Phase 9 | 触发器新增前置对象和动作配置优化 | completed | P0 |
| Task 33 | Phase 9 | 单据闭环步骤条、发布检查和验证回填 | completed | P0 |
| Task 34 | Phase 10 | 定时触发扫描器和到期提醒配置 | completed | P0 |
目标: 在编码前确认会影响数据模型、菜单删除方式和外部推送行为的硬边界。
涉及文件:
code-copilot/changes/lowcode-app-full-loop-optimization/spec.md — 回填待澄清项和确认记录。code-copilot/changes/lowcode-app-full-loop-optimization/tasks.md — 根据确认结果调整任务优先级和范围。确认事项:
documentStatus / document_status。验收标准:
spec.md 第 13 章待澄清项全部有结论。目标: 补齐单据模式和流程实例关联的持久化结构,并收敛菜单入口。
涉及文件:
forge/db/migration/V1.0.47__add_business_document_flow_closure.sql — 新增单据配置表、流程实例关联表,扩展触发器字段,隐藏移动端中心和集成中心菜单。数据结构:
ai_business_document_config。ai_business_flow_instance_link。ai_business_trigger:scenario_type, blocking_mode, developer_mode。ai_business_trigger_log:todo_code, correlation_id。sys_resource 中 /app-center/mobile、/app-center/integration 可见菜单。脚本约束:
CREATE TABLE IF NOT EXISTS。information_schema.columns 判断。V1.0.27、V1.0.31。tenant_id=1。验收标准:
ai_business_document_config.object_code、ai_business_flow_instance_link.business_key 有租户维度唯一约束或防重索引。目标: 为单据配置和流程关联建立 Java 数据模型和 XML 查询入口。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/entity/AiBusinessDocumentConfig.java — 单据配置实体。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/entity/AiBusinessFlowInstanceLink.java — 单据流程实例关联实体。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/mapper/BusinessDocumentConfigMapper.java — 单据配置 Mapper。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/mapper/BusinessFlowInstanceLinkMapper.java — 流程关联 Mapper。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/resources/mapper/BusinessDocumentConfigMapper.xml — 单据配置 XML 查询。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/resources/mapper/BusinessFlowInstanceLinkMapper.xml — 流程关联 XML 查询。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessDocumentConfigDTO.java — 单据配置保存 DTO。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessFlowStartDTO.java — 发起流程 DTO。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessFlowCallbackDTO.java — 流程回调 DTO。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessDocumentConfigVO.java — 单据配置 VO。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessDocumentRuntimeVO.java — 单据运行态 VO。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessFlowRuntimeVO.java — 流程运行态 VO。关键签名:
public interface BusinessDocumentConfigMapper extends BaseMapper<AiBusinessDocumentConfig> {
AiBusinessDocumentConfig selectByObjectCode(@Param("tenantId") Long tenantId,
@Param("objectCode") String objectCode);
AiBusinessDocumentConfig selectByObjectId(@Param("tenantId") Long tenantId,
@Param("objectId") Long objectId);
}
public interface BusinessFlowInstanceLinkMapper extends BaseMapper<AiBusinessFlowInstanceLink> {
AiBusinessFlowInstanceLink selectLatestByBusinessKey(@Param("tenantId") Long tenantId,
@Param("businessKey") String businessKey);
AiBusinessFlowInstanceLink selectByProcessInstanceId(@Param("tenantId") Long tenantId,
@Param("processInstanceId") String processInstanceId);
}
验收标准:
TenantEntity 或按现有实体约定包含租户字段。目标: 提供业务对象单据模式配置的查询和保存能力。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/controller/BusinessDocumentController.java — 单据配置和运行态接口入口。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessDocumentConfigService.java — 单据配置服务。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectPublishService.java — 发布检查加入单据状态字段校验。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectDesignerService.java — 设计器加载时带出单据配置摘要。关键签名:
@GetMapping("/config/{objectId}")
@SaCheckPermission("ai:businessObject:design")
public RespInfo<BusinessDocumentConfigVO> getConfig(@PathVariable Long objectId) { }
@PutMapping("/config/{objectId}")
@SaCheckPermission("ai:businessObject:design")
public RespInfo<Void> saveConfig(@PathVariable Long objectId,
@RequestBody BusinessDocumentConfigDTO dto) { }
public BusinessDocumentConfigVO getConfig(Long objectId);
public void saveConfig(Long objectId, BusinessDocumentConfigDTO dto);
配置校验:
statusField。statusField、starterField、ownerField 必须来自对象字段或系统字段。statusMapping 至少包含 DRAFT、IN_PROCESS、APPROVED、REJECTED。defaultFlowKey 为空时允许保存,但发布检查给出警告。验收标准:
目标: 运行页可查询当前记录的单据状态、流程状态和可执行动作。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessDocumentRuntimeService.java — 单据运行态服务。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/controller/BusinessDocumentController.java — 增加运行态接口。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessPermissionService.java — 增加单据动作权限判断。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.java — 如需读取记录状态,复用安全读取方法,不新增裸 SQL。关键签名:
@GetMapping("/{objectCode}/{recordId}/runtime")
@SaCheckPermission("ai:businessDocument:view")
public RespInfo<BusinessDocumentRuntimeVO> runtime(@PathVariable String objectCode,
@PathVariable Long recordId) { }
public BusinessDocumentRuntimeVO getRuntime(String objectCode, Long recordId);
public List<String> resolveAvailableActions(String objectCode,
Long recordId,
Map<String, Object> recordData);
运行态输出:
documentEnableddocumentStatusdocumentStatusLabelbusinessKeyflowStatusprocessInstanceIdavailableActionsnextActionmessage验收标准:
documentEnabled=false,不影响原页面。availableActions。目标: 将流程绑定从触发器路径下收敛为业务流程接口,并统一变量映射协议。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/controller/BusinessFlowController.java — /ai/business/flow 新接口。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessFlowBindingDTO.java — 流程绑定 DTO。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessFlowBindingVO.java — 流程绑定 VO。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java — 增加新协议方法,兼容旧配置。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/controller/BusinessTriggerController.java — 旧 /trigger/flow/binding 接口标记兼容转发。关键签名:
@GetMapping("/binding/{objectCode}")
@SaCheckPermission("ai:businessFlow:config")
public RespInfo<BusinessFlowBindingVO> getBinding(@PathVariable String objectCode) { }
@PutMapping("/binding/{objectCode}")
@SaCheckPermission("ai:businessFlow:config")
public RespInfo<Void> saveBinding(@PathVariable String objectCode,
@RequestBody BusinessFlowBindingDTO dto) { }
public BusinessFlowBindingVO getFlowBinding(String objectCode);
public void saveFlowBinding(String objectCode, BusinessFlowBindingDTO dto);
协议规则:
formField、flowVariable。field、variable 并转换输出新协议。binding_type 使用 FLOW,不再新增 APPROVAL。验收标准:
FLOW 绑定。field/variable 配置不会导致流程变量为空。field/variable。目标: 手动按钮和触发器发起流程统一调用真实 FlowClient,并写入单据流程关联。
涉及文件:
BusinessFlowService.java — 实现 startDocumentFlow,保留旧 startFlow 兼容。BusinessFlowController.java — 增加 /start 和 /status。BusinessFlowInstanceLinkMapper.java / BusinessFlowInstanceLinkMapper.xml — 查询和防重复。BusinessDocumentRuntimeService.java — 发起前校验单据运行状态和权限。DynamicCrudService.java 或新增内部读取方法 — 根据对象记录读取变量快照。关键签名:
@PostMapping("/start")
@SaCheckPermission("ai:businessFlow:start")
public RespInfo<BusinessFlowRuntimeVO> start(@RequestBody BusinessFlowStartDTO dto) { }
@GetMapping("/status/{objectCode}/{recordId}")
@SaCheckPermission("ai:businessFlow:view")
public RespInfo<BusinessFlowRuntimeVO> status(@PathVariable String objectCode,
@PathVariable Long recordId) { }
public BusinessFlowRuntimeVO startDocumentFlow(BusinessFlowStartDTO dto);
public BusinessFlowRuntimeVO getFlowStatus(String objectCode, Long recordId);
发起逻辑:
variablesSnapshot。FlowClient.startProcess(...)。ai_business_flow_instance_link。IN_PROCESS 对应值。验收标准:
processInstanceId。目标: 流程结束后回写单据状态,并将旧审批接口转发到流程运行服务。
涉及文件:
BusinessFlowController.java — 增加 /callback。BusinessFlowService.java — 增加流程回调处理。BusinessEventPublisher.java — 增加流程通过、流程驳回业务事件发布。BusinessApprovalRuntimeService.java — 兼容转发到 BusinessFlowService,删除模拟返回。BusinessApprovalController.java — 保留接口但声明兼容层,内部调用流程服务。关键签名:
@PostMapping("/callback")
@SaCheckPermission("ai:businessFlow:callback")
public RespInfo<Void> callback(@RequestBody BusinessFlowCallbackDTO dto) { }
public void handleFlowCallback(BusinessFlowCallbackDTO dto);
public Long startApproval(String targetCode, Long recordId);
回写规则:
APPROVED 回写为单据配置中的通过状态。REJECTED 回写为单据配置中的驳回状态。CANCELED 回写为撤回状态。processInstanceId 查关联记录。验收标准:
/ai/business/approval/start 不再返回模拟 recordId。目标: 触发器管理满足项目查询 SQL 规范,并支持场景筛选字段。
涉及文件:
BusinessTriggerMapper.java — 增加分页查询和日志分页 XML 方法。BusinessTriggerMapper.xml — 增加 selectTriggerPage、selectTriggerLogPage。BusinessTriggerService.java — 移除分页查询中的 LambdaQueryWrapper。AiBusinessTrigger.java — 增加 scenarioType、blockingMode、developerMode 字段。AiBusinessTriggerLog.java — 增加 todoCode、correlationId 字段。关键签名:
Page<AiBusinessTrigger> selectTriggerPage(Page<AiBusinessTrigger> page,
@Param("tenantId") Long tenantId,
@Param("objectCode") String objectCode,
@Param("scenarioType") String scenarioType);
Page<AiBusinessTriggerLog> selectTriggerLogPage(Page<AiBusinessTriggerLog> page,
@Param("tenantId") Long tenantId,
@Param("triggerId") Long triggerId);
验收标准:
/ai/business/trigger/page?pageNum=1&pageSize=10 正常返回。scenario_type 筛选。目标: 后端提供触发器业务场景模板,并统一 START_FLOW 变量映射协议。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessTriggerScenarioTemplateVO.java — 场景模板 VO。BusinessTriggerController.java — 新增 /scenario-templates。BusinessTriggerService.java — 新增模板和保存校验方法。BusinessTriggerExecutor.java — 兼容旧变量映射字段。forge-admin-ui/src/views/app-center/trigger.vue — 前端保存使用 formField、flowVariable。关键签名:
@GetMapping("/scenario-templates")
@SaCheckPermission("ai:businessTrigger:list")
public RespInfo<List<BusinessTriggerScenarioTemplateVO>> scenarioTemplates() { }
public List<BusinessTriggerScenarioTemplateVO> scenarioTemplates();
public String normalizeActionConfig(String actionType, String actionConfig);
模板范围:
验收标准:
START_FLOW 触发器保存后的 JSON 使用 formField、flowVariable。field、variable 配置仍能执行。目标: 补齐创建记录、更新字段动作;Webhook 和三方通道保持明确 TODO 状态并记录日志。
涉及文件:
BusinessTriggerExecutor.java — 实现 executeCreateRecordAction、executeUpdateFieldAction,规范 executeWebhookAction。DynamicCrudService.java — 提供受控的内部创建/更新方法。BusinessTriggerService.java — 保存执行日志时写入 correlationId、todoCode。BusinessEvent.java — 增加流程事件常量。BusinessEventPublisher.java — 增加发布流程事件方法。关键签名:
public Map<String, Object> insertInternal(String configKey, Map<String, Object> data);
public void updateFieldsInternal(String configKey, Long id, Map<String, Object> fields);
public void publishFlowApproved(String objectCode,
String recordId,
Map<String, Object> recordData);
public void publishFlowRejected(String objectCode,
String recordId,
Map<String, Object> recordData);
动作规则:
configKey。status=TODO,写入 todoCode=WEBHOOK_NOT_IMPLEMENTED,不发送网络请求。验收标准:
目标: 站内消息可真实发送,企微/飞书/钉钉保留通道和适配器状态。
涉及文件:
BusinessTriggerExecutor.java — 扩展接收人规则和通道处理。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessMessageChannelService.java — 业务消息通道查询和状态判断。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/mapper/BusinessMessageChannelMapper.java — 消息通道 Mapper。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/resources/mapper/BusinessMessageChannelMapper.xml — 消息通道 XML 查询。AiBusinessMessageChannel.java — 补齐状态和配置引用字段映射。关键签名:
public BusinessMessageChannelStatus resolveChannel(String channelCode);
public void sendInternalMessage(JSONObject config, BusinessEvent event);
public JSONObject buildThirdPartyTodoResult(String channelType, String channelCode);
接收人规则:
STARTER:流程发起人。OWNER:单据负责人。CREATOR:记录创建人。USERS:指定用户。ROLES:指定角色。DEPTS:指定部门。验收标准:
MessageService.send。目标: 报表从固定 status 分组升级为业务对象可配置指标。
涉及文件:
BusinessStatsController.java — 增加指标配置和指标数据接口。BusinessStatsService.java — 增加计数、金额汇总、状态/阶段分布、流程结果分布。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessStatsMetricQueryDTO.java — 指标查询 DTO。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessStatsMetricVO.java — 指标数据 VO。AiCrudConfigMapper.xml 或新增字段查询 XML — 校验报表字段来自模型。关键签名:
@GetMapping("/{configKey}/metrics")
@SaCheckPermission("ai:businessStats:view")
public RespInfo<List<BusinessStatsMetricVO>> metrics(@PathVariable String configKey,
BusinessStatsMetricQueryDTO query) { }
public List<BusinessStatsMetricVO> metrics(String configKey, BusinessStatsMetricQueryDTO query);
public BusinessStatsMetricVO sumAmount(String configKey, String amountField);
指标范围:
验收标准:
目标: 单据动作和报表/触发器入口都能按权限展示和校验。
涉及文件:
BusinessPermissionService.java — 增加单据动作权限摘要。BusinessObjectActionService.java — 自定义操作保存时校验权限标识和动作类型。BusinessObjectPublishService.java — 发布检查加入按钮权限缺口。BusinessObjectDesignerController.java — 权限摘要接口返回单据动作权限。BusinessReadinessItemVO.java 或新增 BusinessPermissionSummaryVO.java — 承载权限摘要。关键签名:
public BusinessPermissionSummaryVO documentActionSummary(Long objectId);
public boolean hasDocumentActionPermission(String objectCode, String actionCode);
public BusinessReadinessItemVO permissionSummary(Long objectId);
权限范围:
验收标准:
ai:businessFlow:start 权限时后端拒绝发起流程。目标: 前端和菜单展示不再出现独立审批引擎、导入导出引擎、移动端中心、集成中心。
涉及文件:
forge-admin-ui/src/views/app-center/index.vue — 首页入口收敛,业务对象卡片增加单据/流程摘要入口。forge-admin-ui/src/views/app-center/engines.vue — 仅展示流程、触发器、消息、权限、报表。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessEngineSummaryService.java — 后端引擎统计移除 APPROVAL、IMPORT_EXPORT。forge-admin-ui/src/router/index.js — 保留历史路由但不新增可见入口。forge/db/migration/V1.0.47__add_business_document_flow_closure.sql — 菜单可见性与权限同步。验收标准:
目标: 对象设计器可配置单据模式和状态字段。
涉及文件:
forge-admin-ui/src/api/business-app.js — 新增 document/flow/scenario/stats 接口。forge-admin-ui/src/views/app-center/components/designer/BusinessDocumentPanel.vue — 单据设置面板。forge-admin-ui/src/views/app-center/components/designer/BusinessObjectDesignerShell.vue — 左侧导航增加“单据设置”。forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue — 接入单据面板数据加载和保存。BusinessPermissionFlowPanel.vue — 保留数据权限,避免承担单据设置主职责。前端 API 函数:
export function businessDocumentConfig(objectId) { }
export function saveBusinessDocumentConfig(objectId, data) { }
export function businessDocumentRuntime(objectCode, recordId) { }
export function businessFlowBinding(objectCode) { }
export function saveBusinessFlowBinding(objectCode, data) { }
export function startBusinessDocumentFlow(data) { }
export function businessFlowStatus(objectCode, recordId) { }
export function businessTriggerScenarioTemplates() { }
验收标准:
configKey、表名等开发者字段。目标: 自定义操作从“发起审批”升级为“发起流程”,支持流程选择、变量映射和按钮权限。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessActionDesigner.vue — 操作类型和配置表单调整。forge-admin-ui/src/views/app-center/components/designer/BusinessFlowBindingPanel.vue — 流程绑定和变量映射面板。BusinessObjectDesignerShell.vue — 增加“流程与自动化”导航项。object-designer.[objectCode].vue — 接入流程绑定面板。forge-admin-ui/src/api/flow.js 或复用现有 flowApi.getModelList — 只选择已发布流程。前端规则:
START_FLOW 或统一映射到后端流程动作。formField、flowVariable。${fieldCode}。验收标准:
目标: 触发器页面从技术 JSON 输入升级为业务场景模板和结构化配置。
涉及文件:
forge-admin-ui/src/views/app-center/trigger.vue — 接入场景模板、条件构造器、动作结构化配置。forge-admin-ui/src/views/app-center/components/TriggerConditionBuilder.vue — 条件构造器。forge-admin-ui/src/views/app-center/components/TriggerActionConfigPanel.vue — 动作配置面板。forge-admin-ui/src/api/business-app.js — 补充场景模板接口。配置能力:
验收标准:
目标: 报表页面能按业务对象展示商机场景指标。
涉及文件:
forge-admin-ui/src/views/app-center/stats-dashboard.vue — 指标卡、阶段分布、金额汇总、流程结果分布。forge-admin-ui/src/api/business-app.js — 新增 businessStatsMetrics。forge-admin-ui/src/views/app-center/components/BusinessMetricPanel.vue — 指标展示组件。forge-admin-ui/src/views/app-center/suite.[suiteCode].vue — CRM 套件中增加商机看板入口。展示规则:
验收标准:
undefined、空标题或技术字段名。pnpm build 通过。目标: 用 CRM 商机场景验证单据、流程、消息、报表和权限闭环。
涉及文件:
forge/db/migration/V1.0.51__seed_crm_opportunity_document_flow.sql — 初始化商机单据配置、流程绑定、触发器样例、报表入口。forge/db/migration/V1.0.37__seed_crm_runtime_crud_configs.sql 不允许;如需修正,新增顺延版本脚本中的 UPDATE/INSERT 防重复脚本。DynamicCrudController.java, DynamicCrudService.java — 新增后返回创建记录用于触发器拿到 recordId。BusinessTriggerExecutor.java — 补齐 gt/gte/lt/lte/in/not_in 条件比较,支撑金额阈值。code-copilot/changes/lowcode-app-full-loop-optimization/spec.md — 回填商机验收记录。code-copilot/changes/lowcode-app-full-loop-optimization/tasks.md — 回填执行日志。验收场景:
验收标准:
目标: 用离职申请示例验证“工作表事件触发流程并自动生成交接记录”的参考流程。
涉及文件:
forge/db/migration/V1.0.52__seed_leave_document_flow_demo.sql — 初始化离职申请、离职交接示例对象、单据配置、触发器样例。BusinessTriggerExecutor.java — 补齐日期比较条件,支撑“最后工作日小于等于指定日期”。code-copilot/changes/lowcode-app-full-loop-optimization/spec.md — 回填离职示例验收记录。code-copilot/changes/lowcode-app-full-loop-optimization/tasks.md — 回填执行日志。验收场景:
验收标准:
SKIPPED。目标: 完成本阶段最小质量闭环,确保后端、前端、数据库和主流程可验证。
涉及文件:
code-copilot/changes/lowcode-app-full-loop-optimization/test-spec.md — 如进入 /test 阶段,新增详细测试清单。code-copilot/changes/lowcode-app-full-loop-optimization/execution-log.md — 记录执行命令和结果。验证命令:
cd forge && mvn clean compile
cd forge-admin-ui && source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm build
接口验证:
/ai/business/document/config/{objectId}/ai/business/document/{objectCode}/{recordId}/runtime/ai/business/flow/start/ai/business/flow/status/{objectCode}/{recordId}/ai/business/trigger/page?pageNum=1&pageSize=10/ai/business/trigger/scenario-templates/ai/business/stats/{configKey}/metrics验收标准:
执行结果:
git diff --check 通过。mvn -pl forge-admin-server -am package -DskipTests 通过。pnpm build 通过;仅保留既有 UnoCSS 图标、CSS // 注释、动态/静态导入混用和 chunk size 警告。1.0.54,补齐 sys_flow_template.del_flag 和商机样板 deptManager 流程变量映射。leave_multi,部署 ID 为 dcbda981-5e14-11f1-a0fd-d67ed5f8e875。/ai/business/flow/start 对 OPPORTUNITY/10 返回 code=200,流程实例 602ad5c2-5e15-11f1-a0fd-d67ed5f8e875,单据状态回写为 IN_PROCESS。document/config、document/runtime、flow/status、trigger/page、trigger/scenario-templates、stats/metrics 均返回 code=200。目标: 将实际实现、风险和验收结果回填到变更文档,便于 review 和 archive。
涉及文件:
code-copilot/changes/lowcode-app-full-loop-optimization/spec.md — 更新执行日志、审查结论、确认记录。code-copilot/changes/lowcode-app-full-loop-optimization/tasks.md — 标记任务状态、实际改动文件、验证结果。code-copilot/memory/pitfalls.md — 记录新发现的坑,如流程变量协议、菜单隐藏、触发器异步失败定位。code-copilot/memory/decisions.md — 记录“审批归入流程引擎”等项目决策,如确认后尚未沉淀。验收标准:
执行结果:
execution-log.md 记录 Phase 8 命令、接口、数据库和流程部署结果。spec.md、tasks.md 的 Phase 8 执行记录和 HARD-GATE 结论。code-copilot/memory/pitfalls.md 记录 Flyway 占位符和流程变量映射验证坑。code-copilot/memory/decisions.md 记录审批能力统一归入 Flowable 流程引擎的产品/架构决策。状态: completed
目标: 后端返回稳定的应用菜单归属和最终打开路由,消除 /app-center/app/{id} 中转导致的菜单选中态丢失。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessAppOpenInfoVO.java — 增加 activeMenuKey、menuResourceId、targetRoute、runtimeOpenMode、appName。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessAppDTO.java — 接收入口运行态打开模式。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessAppVO.java — 回显入口运行态打开模式和菜单资源 ID。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessAppOpenService.java — 统一生成目标路由、菜单归属和入口校验结果。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessAppService.java — 保存 options.runtimeOpenMode,同步菜单时保存或回填菜单归属。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/MenuRegisterAdapter.java — 如需更新已有动态菜单 path,必须保留原 sys_resource.id 和角色授权。forge/db/migration/V1.0.55__fix_dynamic_business_app_menu_route.sql — 仅当已有菜单 path 需要批量修复时新增,脚本必须按菜单 ID 或 path 防重复。关键改动:
RUNTIME 应用 open-info 返回最终可访问路由,例如 /ai/crud-page/{configKey}?appId={id}&menuKey={menuKey}。activeMenuKey 优先使用动态应用菜单自身 path 或资源 ID 派生 key,不使用父级 /app-center。runtimeOpenMode 允许值为 LIST、CREATE_FORM、DETAIL;空值按 LIST 兼容。UPDATE 已有资源,不允许删除重建导致角色授权丢失。验收标准:
/ai/business/app/{id}/open-info 对已发布 RUNTIME 应用返回 targetRoute、activeMenuKey、menuResourceId 和 runtimeOpenMode。configKey 或运行配置不可用时,open-info 返回明确 message,前端可展示下一步。执行结果:
BusinessAppDTO、BusinessAppVO、BusinessAppOpenInfoVO 增加 runtimeOpenMode、targetRoute、menuResourceId、activeMenuKey 协议字段。BusinessAppService 已将 runtimeOpenMode 保存到 ai_business_app.options,并在 RUNTIME 应用菜单同步时使用最终运行页路径 /ai/crud-page/{configKey}?appId=...&runtimeOpenMode=...;已有菜单通过 menuResourceId 或 perms 更新,不删除重建。BusinessAppOpenService 已返回带 appId/menuKey/menuResourceId/runtimeOpenMode/mode/title 的 targetRoute,并保留原运行配置、安全和权限校验。状态: completed
目标: 点击动态应用菜单、刷新运行页和 Tab 切换时,当前业务应用菜单稳定选中,父级目录只展开不闪动为选中项。
涉及文件:
forge-admin-ui/src/composables/useMenu.js — activeKey 优先读取 route.query.menuKey、route.query.appId、route.meta.parentKey。forge-admin-ui/src/utils/menu-utils.js — 路由匹配支持 query 中的菜单归属,保留原 path 匹配兜底。forge-admin-ui/src/views/app-center/app-entry.vue — 调用 open-info 后跳转到带 appId/menuKey/menuResourceId 的 targetRoute。forge-admin-ui/src/views/ai/crud-page.vue — 页面标题和 Tab 标题优先使用应用名称,刷新后恢复菜单归属。forge-admin-ui/src/api/business-app.js — open-info 类型字段和目标路由字段对齐。关键改动:
router.replace({ path, query }) 保留菜单归属 query。useMenu 的当前 key 解析顺序为:显式 menuKey → appId 对应动态菜单 → meta.parentKey → 当前路径匹配。/ai/crud-page/{configKey}?appId=...&menuKey=... 后不依赖中转页即可恢复菜单选中。验收标准:
/app-center 或“应用总览”。appId/menuKey 的普通动态 CRUD 页面仍按原路径选中。执行结果:
useMenu.activeKey 已优先识别 menuKey/menuResourceId/appId,点击动态应用菜单时自动把当前菜单 key、资源 ID 和标题写入路由 query。permission.js 已在动态路由注册时剥离菜单 path 中的 query,避免 /ai/crud-page/{configKey}?mode=... 被注册成非法 route path。tab-guard.js、page-title-guard.js 已支持按 menuKey 或 title 恢复动态应用 Tab/浏览器标题。app-entry.vue 兼容历史 /app-center/app/{id} 中转页,跳转时使用 targetRoute 并保留菜单归属 query。menu-utils.js 和 business-app.js;现有路径归一化已满足 query 剥离,API 方法签名无需变化。状态: completed
目标: 应用入口支持列表管理和新增填报两种主要运行模式,业务单据填报类入口点击后直接打开新增表单。
涉及文件:
forge-admin-ui/src/views/app-center/components/AppEditorDrawer.vue — 增加“运行态打开模式”控件,默认值按应用类型和单据配置建议。forge-admin-ui/src/api/business-app.js — 保存和回显 runtimeOpenMode。forge-admin-ui/src/views/ai/crud-page.vue — 解析 mode=create,配置加载完成后触发新增表单。forge-admin-ui/src/components/ai-form/AiCrudPage.vue — 暴露或复用新增动作入口,支持父页面触发一次性打开新增表单。forge-admin-ui/src/components/ai-form/AiCrudPageProps.js — 如现有 props 不足,补充 initialMode 或 autoOpenCreate。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessAppOpenService.java — 生成 CREATE_FORM 目标路由 query。关键改动:
LIST 打开 /ai/crud-page/{configKey},保留现有列表管理体验。CREATE_FORM 打开 /ai/crud-page/{configKey}?mode=create&appId=...&menuKey=...,页面只自动打开一次新增表单。options.createSuccessAction。验收标准:
执行结果:
AppEditorDrawer.vue 已增加运行态打开模式控件:LIST、CREATE_FORM、DETAIL;新建入口名称包含“填报/申请/提交/录入/上报/登记”时默认建议 CREATE_FORM。crud-page.vue 已支持 mode=create 自动调用运行页新增表单,支持 mode=detail&recordId=... 打开详情;新增保存成功后移除 mode=create 并停留在列表。SimpleCrudTemplate.vue、MasterDetailCrudTemplate.vue、TreeCrudTemplate.vue 已透出 showAdd/showDetail/refresh,保证不同运行模板都能响应填报入口。AiCrudPage 已有 showAdd 暴露能力,未新增 AiCrudPageProps;新增成功后的列表刷新沿用 AiCrudPage 原有提交成功逻辑。状态: completed
目标: 后端提供编号规则内置变量、预览校验和结构化状态映射协议,让前端不再要求用户手填隐式语法。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/controller/BusinessDocumentController.java — 增加编号变量和预览接口。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessDocumentConfigService.java — 编号规则校验、状态映射标准化、主流程摘要回显。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessDocumentConfigDTO.java — 扩展 noRuleTemplate、结构化 statusMapping、状态动作策略。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessDocumentConfigVO.java — 回显编号规则预览结果、状态映射表和主流程摘要。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessDocumentNoRulePreviewDTO.java — 编号规则预览入参。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessDocumentNoRuleTokenVO.java — 内置变量定义。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessDocumentNoRulePreviewVO.java — 预览结果和错误明细。关键改动:
GET /ai/business/document/no-rule/tokens,返回 ${yyyy}、${yyyyMM}、${yyyyMMdd}、${HHmmss}、${seq}、${seq:4}、${suiteCode}、${objectCode}、${starter}、${deptCode}、${field:<fieldCode>}。POST /ai/business/document/no-rule/preview,只用样例数据生成预览,不占用真实序列号。验收标准:
执行结果:
BusinessDocumentController 已新增 GET /ai/business/document/no-rule/tokens 和 POST /ai/business/document/no-rule/preview,均保留 ai:businessObject:design 权限。BusinessDocumentConfigDTO/VO 已扩展 noRuleTemplate、statusMappingRows、statusActionPolicy、noRulePreview 和 mainFlowSummary。BusinessDocumentConfigService 已支持编号变量渲染和未知变量校验;预览只使用样例数据和内存序号,不写业务表、不占用真实序列。status_mapping 简单映射,同时把结构化状态行写入 options.statusMappingRows 并回显。状态: completed
目标: 把单据设置页从松散技术表单调整为可操作工作台,完成编号规则、状态映射和发布摘要的产品化配置。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessDocumentPanel.vue — 重构布局,移除独立默认流程选择器。forge-admin-ui/src/views/app-center/components/designer/DocumentNoRuleEditor.vue — 编号规则变量插入、预览和错误展示。forge-admin-ui/src/views/app-center/components/designer/DocumentStatusMappingTable.vue — 状态映射表格、默认状态集、从字典生成。forge-admin-ui/src/views/app-center/components/designer/DocumentConfigSummary.vue — 单据配置和发布检查摘要。forge-admin-ui/src/api/business-app.js — 接入编号变量、编号预览、单据配置保存回显。关键改动:
验收标准:
${seq:4} 语法完成编号规则配置。执行结果:
BusinessDocumentPanel.vue 已重构为基础配置、编号规则、状态映射和右侧摘要工作台,移除单据页独立默认流程下拉。DocumentNoRuleEditor.vue,支持编号变量分组展示、点击插入、实时预览和错误/警告展示。DocumentStatusMappingTable.vue,支持默认状态集、从状态字段本地选项生成、结构化动作策略编辑。DocumentConfigSummary.vue,展示状态字段、编号规则、状态映射和主流程摘要,并提供“去配置主流程”入口。object-designer.[objectCode].vue 已把单据摘要的主流程入口切到 automation 面板。状态: completed
目标: 合并“单据设置默认流程”和“流程与自动化流程模型”,以主流程绑定为唯一事实来源,同时兼容历史配置。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java — 主流程绑定读取、保存、完整度检查和兼容转换。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessDocumentConfigService.java — 单据配置返回主流程摘要,保存时同步兼容字段。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectPublishService.java — 发布检查以 ai_business_binding 主流程为准。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessFlowBindingDTO.java — 明确 startMode、titleTemplate、variableMappings 和状态回写配置。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessFlowBindingVO.java — 返回主流程摘要、完整度、缺口列表和兼容来源。forge/db/migration/V1.0.56__backfill_business_main_flow_binding.sql — 将仅存在于 default_flow_key 的历史配置回填到 ai_business_binding,脚本必须防重复。关键改动:
ai_business_binding(target_type=OBJECT,target_code=objectCode,binding_type=FLOW) → 历史 ai_business_document_config.default_flow_key 兼容读取。ai_business_document_config.default_flow_key 作为兼容快照。验收标准:
default_flow_key 的对象仍能打开并看到主流程摘要。default_flow_key 和 ai_business_binding 不一致时,以 ai_business_binding 为准,并在保存后回写兼容字段。执行结果:
BusinessFlowService#getFlowBinding 已按 ai_business_binding(FLOW) 优先读取;无主绑定但存在历史 default_flow_key 时返回兼容主流程 VO。BusinessFlowService#saveFlowBinding 保存主流程后同步回写 ai_business_document_config.default_flow_key 作为兼容快照。BusinessDocumentConfigService 查询单据配置时返回 mainFlowSummary,且保存单据配置时不再以单据页流程选择作为新事实来源。BusinessObjectPublishService 发布检查已改为读取主流程摘要,提示主流程未配置或变量映射缺失等缺口。default_flow_key 通过读取兼容和保存回写完成渐进迁移。状态: completed
目标: 选择流程模型后,后端自动提取流程变量候选项并给出字段映射建议,减少手填变量名。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/controller/BusinessFlowController.java — 增加流程变量候选项接口。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java — 组装变量候选项、字段候选项和映射建议。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowVariableResolver.java — 解析 BPMN、动态表单和内置变量。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessFlowVariableCandidateVO.java — 流程变量候选项。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessFlowVariableMappingSuggestionVO.java — 自动映射建议。forge/forge-flow/forge-flow-client/src/main/java/com/mdframe/forge/flow/client/FlowClient.java 或业务侧适配服务 — 获取流程模型详情时只返回变量解析所需字段。forge/forge-flow/forge-flow-server/src/main/java/com/mdframe/forge/flow/controller/FlowModelController.java — 确认模型详情、BPMN XML 和表单 JSON 可获取字段。关键改动:
GET /ai/business/flow/model/{modelKey}/variables?objectCode=...。${variable}、审批人表达式、flowable:assignee、candidateUsers、candidateGroups、动态表单字段、模板变量配置和内置变量。initiator、startUserId、businessKey、recordId、objectCode、deptId、deptManager。amount、opportunityAmount、deptManager。验收标准:
执行结果:
BusinessFlowController 已新增 GET /ai/business/flow/model/{modelKey}/variables?objectCode=...,保留 ai:businessFlow:config 权限。BusinessFlowVariableResolver,解析内置变量、BPMN 表达式/审批人属性、流程动态表单字段和业务对象字段候选项。BusinessFlowVariableCandidateVO、BusinessFlowVariableMappingSuggestionVO,并在 FlowClient 增加按模型 Key 获取模型详情能力。BusinessFlowBindingPanel.vue 已接入变量候选项,下拉选择流程变量,并支持“一键应用推荐映射”且不覆盖已有映射。状态: completed
目标: 将流程与自动化页面升级为主流程配置工作台,变量映射和标题模板均支持选择、插入、预览和高级输入。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessFlowBindingPanel.vue — 主流程模型、发起方式、变量映射、标题模板和状态回写重构。forge-admin-ui/src/views/app-center/components/TriggerActionConfigPanel.vue — START_FLOW 动作复用流程变量候选项和标题模板编辑器。forge-admin-ui/src/views/app-center/components/designer/FlowVariableMappingEditor.vue — 字段到流程变量映射表。forge-admin-ui/src/views/app-center/components/designer/TemplateVariableEditor.vue — 标题模板变量插入和预览。forge-admin-ui/src/api/business-app.js — 接入主流程保存、变量候选项、映射建议和标题预览所需接口。forge-admin-ui/src/api/flow.js — 流程模型选择仅展示可发起或已发布流程。关键改动:
商机名称-商机审批-20260602。field/variable 读取时转换为 formField/flowVariable,保存时统一写新协议。验收标准:
${fieldCode}。执行结果:
FlowVariableMappingEditor.vue,统一支持单据字段选择、流程变量下拉、自定义变量和推荐映射补空。TemplateVariableEditor.vue,支持单据字段/流程变量 token 点击插入、标题模板实时预览和未知变量提示。BusinessFlowBindingPanel.vue 已重构为主流程配置工作台,选择流程后加载候选变量和映射建议。TriggerActionConfigPanel.vue 的 START_FLOW 动作已复用同一套变量映射和标题模板编辑器。状态: completed
目标: 主流程发起方式为手动或手动+自动时,运行态根据状态、权限和配置自动生成“发起流程”按钮并绑定真实发起事件。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessDocumentRuntimeService.java — 返回自动流程按钮可用性和禁用原因。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java — /ai/business/flow/start 支持运行态按钮发起并返回状态摘要。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessPermissionService.java — 校验 ai:businessFlow:start 和对象按钮权限。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessDocumentRuntimeVO.java — 增加 runtimeActions 或自动按钮摘要。forge-admin-ui/src/views/ai/crud-page.vue — 加载单据运行态并向 AiCrudPage 传递自动按钮配置。forge-admin-ui/src/components/ai-form/AiCrudPage.vue — 渲染自动“发起流程”按钮,补齐 START_FLOW 执行分支。forge-admin-ui/src/views/app-center/components/designer/BusinessActionDesigner.vue — 自定义“发起流程”改为覆盖配置,避免重复按钮。关键改动:
startMode 为 MANUAL 或 BOTH 且记录为草稿、无进行中流程、有权限时展示按钮。POST /ai/business/flow/start,payload 包含 objectCode、recordId,优先使用主流程绑定,不要求前端传完整流程配置。START_FLOW 覆盖项,按相同位置去重,只保留一个按钮。验收标准:
执行结果:
BusinessDocumentRuntimeVO 新增 runtimeActions,返回运行态自动按钮、禁用态和禁用原因。BusinessDocumentRuntimeService 按主流程配置、发起方式、单据状态、进行中流程和动作权限生成“发起流程”按钮。AiCrudConfigRenderVO/AiCrudConfigService 已向运行页透出 objectCode。crud-page.vue 加载列表后为当前页记录附加 _runtimeActions,AiCrudPage.vue 合并行级动作并执行 START_FLOW。POST /ai/business/flow/start,payload 为 { objectCode, recordId },发起成功后刷新列表。状态: completed
目标: 修复新增触发器空对象提交报错,确保全局新增先选业务对象,对象上下文新增自动带入对象和字段。
涉及文件:
forge-admin-ui/src/views/app-center/trigger.vue — 新增弹窗第一步选择业务对象,支持 query 默认对象和保存前阻断。forge-admin-ui/src/views/app-center/components/TriggerActionConfigPanel.vue — 业务对象确定后再加载字段、条件和动作配置。forge-admin-ui/src/views/app-center/components/designer/BusinessObjectDesignerShell.vue — 从对象设计器进入触发器配置时携带 objectCode。forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue — 主链路跳转触发器时传递当前对象上下文。forge-admin-ui/src/api/business-app.js — 触发器新增、更新前端请求保持对象编码必填。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerService.java — 后端错误文案保持明确,场景模板补齐默认动作配置。关键改动:
objectCode,新增弹窗默认选中当前对象并立即加载字段。objectCode、triggerName、eventType、actionType、actionConfig,不把空对象编码交给后端。验收标准:
OPPORTUNITY 并能看到商机字段。执行结果:
trigger.vue 支持 route.query.objectCode 作为对象上下文,新建触发器默认带入当前对象。TriggerActionConfigPanel 接收 objectCode,发起流程动作按当前对象加载流程变量候选和推荐映射。状态: completed
目标: 把单据设置、主流程、发起方式、触发器、发布检查和试运行串成连续配置链路,并完成 Phase 9 验证记录。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessObjectDesignerShell.vue — 增加“单据闭环配置”步骤条和完成度摘要。forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue — 步骤切换、下一步动作、试运行入口和发布检查刷新。forge-admin-ui/src/views/app-center/components/designer/BusinessPublishChecklist.vue — 汇总单据字段、编号规则、状态映射、主流程、变量映射、手动按钮、触发器、菜单入口和权限缺口。forge-admin-ui/src/views/app-center/components/ReadinessPanel.vue — 展示闭环配置完成度和运行缺口。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectPublishService.java — 发布检查增加 Phase 9 缺口项。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectReadinessService.java — 运行态 readiness 增加菜单入口、打开模式和主流程完整度。code-copilot/changes/lowcode-app-full-loop-optimization/test-spec.md — 如进入 /test 阶段,补充 Phase 9 增量测试清单。code-copilot/changes/lowcode-app-full-loop-optimization/execution-log.md — 记录 Phase 9 实际执行命令、结果、警告和跳过项。code-copilot/changes/lowcode-app-full-loop-optimization/spec.md — 回填 Phase 9 实施结论和风险。code-copilot/changes/lowcode-app-full-loop-optimization/tasks.md — 回填 Task 23-33 状态和验证结果。关键改动:
TRIGGER 或 BOTH,下一步进入触发器配置并自动带入对象和流程。code-copilot/rules/automated-testing-standard.md,复用已有 test-spec.md、execution-log.md、spec.md、tasks.md 做增量验证。验收标准:
execution-log.md。执行结果:
BusinessObjectDesignerShell.vue 新增“单据闭环配置”步骤条,并支持从更多菜单进入触发器配置。object-designer.[objectCode].vue 串联单据保存、主流程保存、触发器配置、发布检查和试运行入口。BusinessObjectPublishService 发布检查补充应用入口、菜单资源、运行打开模式、编号规则、状态映射、自动按钮和触发器缺口项。BusinessObjectReadinessService 增加 DOCUMENT_CLOSURE_STATUS,提示单据、主流程和触发器就绪缺口。test-spec.md 并在 execution-log.md 追加 Task 30-33 的后端编译、前端构建和 diff 检查结果。状态: completed
目标: 将触发器 SCHEDULE 类型从配置占位补齐为真实执行能力,并控制扫描频率、批量大小和重复触发风险。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerSchedulerService.java — 新增低频扫描任务,注册到系统任务调度中心,默认每 5 分钟扫描一次启用的定时触发器,并通过 Redisson 全局锁作为并发兜底。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/pom.xml — 引入 forge-starter-job,让低代码模块只依赖任务注解,不直接耦合任务插件实现。forge/forge-framework/forge-plugin-parent/forge-plugin-job/src/main/java/com/mdframe/forge/plugin/job/config/ScheduleConfig.java、JobProperties.java — 补齐 Quartz 集群配置和可配置项。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerExecutor.java — 暴露单条触发器同步执行入口,复用现有动作执行和日志,使记录级锁覆盖完整执行过程。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerService.java — 统一 SCHEDULE/SCHEDULED 枚举,补齐定时触发器查询、日志去重和扫描时间回写方法。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/mapper/BusinessTriggerMapper.java、BusinessTriggerMapper.xml — XML 查询启用的定时触发器。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/mapper/BusinessTriggerLogMapper.java、BusinessTriggerLogMapper.xml — 查询同一触发器、记录、事件在时间窗口内是否已成功执行。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.java — 提供定时扫描候选记录的受控读取方法,按到期字段区间查询并限制批量。forge-admin-ui/src/views/app-center/trigger.vue — 定时触发配置统一使用 SCHEDULE,增加到期字段、提前天数、回看天数、单批数量和最小执行间隔配置。关键改动:
0 0/5 * * * ?。RedissonClient,扫描任务仍依赖任务中心集群触发和日志去重;如需手动并发兜底建议启用 Redis/Redisson。schedule.dueField,扫描器只按到期字段区间查询,不做无条件全表扫描。triggerId + recordId + eventType 默认按自然日去重,成功或 TODO 后当天不重复触发。schedule.minIntervalMinutes,默认至少 5 分钟,避免同一触发器被过于频繁扫描。SCHEDULED,保存时规范为 SCHEDULE。验收标准:
triggerType 为 SCHEDULE,且事件类型为 SCHEDULED_DUE。batchSize 限制。git diff --check 通过,跳过项按测试标准记录。执行结果:
BusinessTriggerSchedulerService,使用 @ScheduledJob(name="lowcodeBusinessTriggerScanJob", group="LOWCODE", cron="0 0/5 * * * ?") 注册到系统任务调度中心,并通过 forge.business-trigger.schedule.cluster-lock-enabled=true 保留 Redisson 全局扫描锁兜底。forge-plugin-generator 增加 forge-starter-job 依赖,低代码模块不直接依赖 forge-plugin-job。forge.job.clustered 默认 true,并支持线程数、集群 checkin 间隔、misfire 阈值和表前缀配置。tenantId + triggerId + recordId + naturalDay 生成;定时触发动作改为同步执行,确保锁覆盖动作和执行日志写入。SUCCESS/TODO 去重、扫描时间回写和 SCHEDULED 兼容归一。pnpm build 通过,git diff --check 通过;未启动后端/数据库/多实例做真实任务注册、Quartz 集群触发和扫描落库验证,已在执行日志中记录为跳过。状态: completed
本轮补充项:
/ai/crud-page 头部重复“新增”按钮:标准新增由 AiCrudPage 内置按钮承载,运行态自定义 toolbar action 和发布侧历史标准 CRUD action 做去重。FLOW 绑定,并在发起失败时输出绑定、运行配置、单据配置和候选 flowModelKey 来源日志。adminMenu.actualParentId/suiteMenuResourceId,编辑抽屉只读回显实际挂载目录。验证结果:
git diff --check 通过。forge-plugin-generator 及依赖模块 compile 通过。pnpm --dir forge-admin-ui build 通过;既有 UnoCSS 图标、CSS 注释、动态/静态导入和 chunk size 警告不阻断。状态: completed
目标: 让应用总览的业务域树支持继续新增子目录,并让低代码发布菜单按业务域父链递归挂载,父业务域列表能看到子树应用。
涉及文件:
forge-admin-ui/src/components/lowcode-builder/domain/DomainTreePanel.vue — 节点菜单增加“新增子目录”和“编辑领域”。forge-admin-ui/src/components/lowcode-builder/domain/DomainEditorDrawer.vue — 新建子目录时显示更明确的标题并自动回填父级。forge-admin-ui/src/views/ai/lowcode-apps.vue — 新增子目录/编辑领域入口,编辑时先拉详情并在保存后刷新当前选中节点。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeDomainService.java — 增加循环父级校验和子树 ID 收集。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeAppService.java — 应用总览按当前领域子树查询。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodePublishService.java — 发布时递归解析领域目录父级。forge-server/forge-admin-server/src/main/java/com/mdframe/forge/admin/bridge/MenuRegisterAdapterImpl.java — 支持领域目录按指定父级创建和迁移。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/mapper/AiCrudConfigMapper.java、forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/resources/mapper/AiCrudConfigMapper.xml — 低代码应用分页按领域子树 IN (...) 查询。code-copilot/changes/lowcode-app-full-loop-optimization/test-spec.md、execution-log.md、spec.md — 追加本轮增量验证和结论。关键改动:
低代码根目录 -> 父业务域目录 -> 子业务域目录 -> 应用菜单。验收标准:
sys_resource.id,不破坏已有角色授权。git diff --check 通过,真实菜单落库和浏览器回显验证按环境条件补跑。执行结果:
LowcodePublishService 已改为递归解析业务域目录父级,领域目录按业务域父链挂载。MenuRegisterAdapterImpl 支持领域目录按指定父级创建和更新,已有目录会迁移到正确父级。LowcodeAppService 的分页查询已改为按领域子树取数,父域视图可直接看到子域应用。DomainTreePanel.vue、DomainEditorDrawer.vue 和 lowcode-apps.vue 已补齐新增子目录和编辑入口。git diff --check、后端编译和前端 pnpm build 验证。状态: completed
背景: 用户截图指向的是 应用总览 页面左侧业务域列表,而不是低代码构建器里的业务域树。上一轮 Task 35 的主要实现落在 ai_lowcode_domain 链路,本任务补齐应用总览实际使用的 ai_business_suite 链路。
涉及文件:
forge-server/db/migration/V1.0.80__add_business_suite_hierarchy.sql — 给 ai_business_suite 增加 parent_id 和父级索引。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/entity/AiBusinessSuite.java、dto/businessapp/BusinessSuiteDTO.java、vo/businessapp/BusinessSuiteVO.java、vo/businessapp/BusinessSuiteSummaryVO.java — 增加业务套件父级字段。BusinessSuiteService.java、BusinessSuiteMapper.java、BusinessSuiteMapper.xml — 增加父级校验、子域删除拦截、业务套件菜单目录递归解析。BusinessObjectQueryDTO.java、BusinessAppQueryDTO.java、BusinessObjectService.java、BusinessAppService.java、BusinessObjectMapper.xml、BusinessAppMapper.xml — 支持父业务域选中后按子树 suiteCodes IN (...) 查询对象和入口。forge-admin-ui/src/views/app-center/index.vue — 左侧业务域列表按 parentId 渲染为树,节点三点菜单提供“新增子目录”,父域查询聚合子树。forge-admin-ui/src/views/app-center/components/SuiteEditorDrawer.vue — 新增“上级业务域”选择并过滤自身/后代。关键改动:
ai_business_suite.parent_id 渲染业务域树,而不是继续使用低代码域模型。suiteCode,对象和入口接口按 suiteCodes 聚合查询。ai:business:suite-menu:{suiteCode} 复用已有 sys_resource.id。验证结果:
git diff --check 通过。pnpm --dir forge-admin-ui exec eslint src/views/app-center/index.vue src/views/app-center/components/SuiteEditorDrawer.vue 通过。mvn -q -pl forge-framework/forge-plugin-parent/forge-plugin-generator,forge-admin-server -am compile -DskipTests 通过。