feat(flow): 工作台与轨迹优化 + 管理端启用回路 + 本地验签配置修复
build / build-push (push) Successful in 1m30s

- 已办去重: 同一办件一行 + doneCount 累计次数(FlwTaskRepository 查询去重)
- 发起/撤回/重提留痕事件行(状态码 6/7, 无需 DDL); /oapi/flow/progress steps 含撤回/重提步骤
- 管理端新增启用回路: POST /admin/map/enable/{id}、POST /admin/def/enable/{id}; GET /api/flow/def/source 源码查询
- 修复 findEnabledByOrdId 未过滤 status 的隐性缺陷; 新增 DeptLabelSupport 科室标签支撑
- 测试: FlowEngineIT 撤回留痕/已办去重断言、OapiFlowContractIT 撤回步骤断言(94 tests 全过)
- 本地验签修复: 本地 UserBase 无 context-path, yh.open.services 显式覆盖服务目录枚举兜底的 /userbase basePath, 否则出站签名与服务端剥离不对齐 → GetUserInfo 等全部「验签失败」; 生产经 Caddy 挂 /userbase 时删除 services 覆盖
This commit is contained in:
chenxing
2026-09-18 16:56:01 +08:00
parent 434aa9d185
commit 9cc0b06c29
18 changed files with 956 additions and 248 deletions
@@ -210,10 +210,22 @@ class FlowDiagramServiceTest {
void c1_autoView_deptKeyNode_rendersDeptStyle() {
when(mapRepository.findEnabled(SCH, "rs")).thenReturn(Arrays.asList(
mapRow("人事处", 11, "张三"), mapRow("人事处", 12, "李四")));
FlowModels.NodeVo n1 = node(service.build(def(DEPT_DEF_JSON), null, null), "n1");
FlowModels.NodeVo n1 = node(service.build(def(DEPT_DEF_JSON), null, "auto"), "n1");
assertEquals("人事处", n1.getLabel());
assertEquals("科室 · 2人 · 时限48h", n1.getSubLabel());
assertEquals("auto", service.build(def(DEPT_DEF_JSON), null, null).getMode());
assertEquals("auto", service.build(def(DEPT_DEF_JSON), null, "auto").getMode());
}
/** 2026-09-18:mode 缺省改为人员视图(原 auto 自适应)——老深链显式带 auto 仍按自适应出图 */
@Test
void c1_defaultMode_isUserView() {
when(mapRepository.findEnabled(SCH, "rs")).thenReturn(Arrays.asList(
mapRow("人事处", 11, "张三"), mapRow("人事处", 12, "李四")));
FlowModels.DiagramVo vo = service.build(def(DEPT_DEF_JSON), null, null);
assertEquals("user", vo.getMode());
FlowModels.NodeVo n1 = node(vo, "n1");
assertEquals("人事处审批", n1.getLabel());
assertEquals("张三、李四 · 时限48h", n1.getSubLabel());
}
// ==================== C2:USERS 节点人员视图(UserBase 补名降级) ====================
@@ -289,7 +301,8 @@ class FlowDiagramServiceTest {
FlowModels.DiagramVo vo = service.byGuid(SCH, "g1", null);
assertEquals("教师入职", vo.getName());
assertEquals(Integer.valueOf(2), vo.getVersion());
assertEquals("auto", vo.getMode());
// 2026-09-18:缺省口径=人员视图
assertEquals("user", vo.getMode());
assertNull(vo.getInstanceId());
}