Skip to content

Dev - #187

Merged
xlorne merged 12 commits into
mainfrom
dev
Aug 6, 2026
Merged

Dev#187
xlorne merged 12 commits into
mainfrom
dev

Conversation

@xlorne

@xlorne xlorne commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

No description provided.

xlorne and others added 12 commits August 6, 2026 14:32
- FlowSession 新增 loadPreviousNodeOperatorIds 能力:以当前流程记录所在节点作为上一节点,
  按 fromId 定向查询该节点的流程记录,提取审批人员Id并去重、排序
- GroovyScriptRequest 透传 findPreviousNodeOperatorIds 脚本函数,
  支持后续节点复用前序节点审批人(如 D 节点审批人与 C 节点保持一致)
- 修复 FlowOperatorLocalThreadCache 合并缓存时打乱操作人顺序的问题,
  按入参Id顺序返回,保证多人审批顺序稳定
- 新增 A-B-C-D-E 场景测试(正常流转、D节点拒绝回退C节点、流程节点预览)

closes #185

Co-Authored-By: Claude <noreply@anthropic.com>
沉淀 A-B-C-D-E 场景测试(#185)的完整实践经验:
- 阶段一:PKR 查阅与现有机制对照(发起人/审批人设定、并签、拒绝退回等)
- 阶段二:TDD 编写场景测试(步骤化助手方法、待办/processId/展示断言要点)
- 阶段三:问题定位方法(失败信息分类、临时诊断、调用链追根因、最小化修复)
- 阶段四:回归验证命令
- 阶段五:issue 记录与关联提交推送流程

Co-Authored-By: Claude <noreply@anthropic.com>
前端代码通过 submodule(flow-frontend)集成,涉及前端的改动必须在
前端仓库内处理与提交,不能直接提交到后端仓库;后端仓库仅维护子模块指针。

Co-Authored-By: Claude <noreply@anthropic.com>
- AdviceStrategy 新增 adviceHidden 配置,toMap/fromMap/copy 同步,反序列化兼容存量数据
- NodeStrategyManager 新增 isAdviceHidden;隐藏审批意见时意见必填放宽,避免流程卡死
- FlowContent 详情接口下发 adviceHidden,供前端审批弹框控制意见输入框展示
- 新增 FlowAdviceHiddenServiceTest:序列化往返与存量兼容、详情下发、免填意见审批、必填对照

closes #180

Co-Authored-By: Claude <noreply@anthropic.com>
子流程配置通过 /api/cmd/workflow/meta 获取目标流程开始节点的动作列表,
获取到的流程节点操作应均为非 disable 的动作按钮,禁用的动作不应作为候选。

- WorkflowMeta 按 IFlowAction::enable 过滤开始节点动作
- 新增 WorkflowMetaTest:禁用动作排除复现用例 + 全启用回归用例

closes #183

Co-Authored-By: Claude <noreply@anthropic.com>
- 新增流程级参数 maxNestDepth(int 默认 10),完整贯穿 Workflow/WorkflowVersion/JPA 实体/Convertor/toJson-formJson 持久化链路
- 子流程创建前沿 parentId 父链循环检测:同一子流程节点(同节点+同运行时)在实例链上重复触发即抛 execution.subProcess.loop
- 子流程嵌套深度校验:超过 maxNestDepth 抛 execution.subProcess.maxDepth,兜底任意动态脚本循环
- 普通节点 errorTrigger 跳转 visited 节点集合 + 深度双重防护(execution.node.errorTriggerLoop / errorTriggerDepth)
- errorTrigger/Reject/Return 跳转抄送或子流程节点时抛 execution.node.invalidJumpTarget,不再静默停滞
- 节点执行次数兜底检测(execution.node.loopDepth),覆盖环形状循环链
- FlowSubProcessLoopGuardTest 覆盖 9 个循环防护场景(自循环/复合循环/errorTrigger 自循环/深度超限/跳转拦截/合法嵌套)

closes #182

Co-Authored-By: Claude <noreply@anthropic.com>
- NodeViewJavaScriptCacheContext:每缓存项一个 Timer 且覆盖/删除/保存不 cancel,生产频繁更新视图缓存即线程累积
- MockInstance + MockInstanceFactory:外部 clear 不 cancel 定时任务,线程存活至多 15 分钟
- DelayTaskManager:每任务一个 Timer
- 统一改为共享 daemon ScheduledExecutorService(单线程调度),覆盖/删除/关闭时 cancel
- 升级 springboot-framework 3.4.54 -> 3.4.55(上游 TempGroovyScriptContext 同类 Timer 泄漏修复)

closes #186

Co-Authored-By: Claude <noreply@anthropic.com>
- 新增 LoopTriggerTraceContext:触发点内存标记 + 时间窗口 + 共享调度线程定时清理,被动式检测不主动查询数据库,消除每次流转的 findProcessRecords 全量查询
- 移除 BaseAuditNode/NotifyNode 的 verifyNodeExecutionCount(原高频路径全量扫描,且 processId 无索引)
- NotifyNode 抄送自动流转环改为内存标记检测(execution.node.loopDepth)
- SubProcessStrategy parentId 回溯加深度上限(最多 maxNestDepth 层),并对未落库记录(id=0,数据库生成)做防御性跳过
- 新增 LoopTriggerTraceContextTest 5 个单元测试;删除过时的重审次数拦截测试(重审为合法用户操作)

closes #182

Co-Authored-By: Claude <noreply@anthropic.com>
- PassAction 先保存当前记录再触发后续节点,避免子流程嵌套执行完成后
  以陈旧的运行中状态覆盖已更新的流程完成状态
- 新增自动完成场景测试(SubProcess+抄送/触发/延迟/最简流程)
- 新增 copy-on-read 测试仓储模拟生产 JPA 对象隔离语义复现问题

closes #184

Co-Authored-By: Claude <noreply@anthropic.com>
@xlorne
xlorne merged commit c25eaf4 into main Aug 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant