feat(engine): NOTIFY 抄送 + CONDITION 条件路由 + JOIN scope 修复(两批全栈)
build / build-push (push) Successful in 47s
build / build-push (push) Successful in 47s
- NOTIFY:TYPE_NOTIFY 瞬时抄送(flw_cc 逐人留痕 + CC_SENT 事件 + 站内通知不加待办角标)、/api/flow/cc/my、轨迹 kind=CC 与 oapi progress 抄送步、示意图青框卡片
- CONDITION:flw_router 判断服务注册 + flw_route_log 决策留痕(REQUIRES_NEW,reroute 回滚不丢失败行)+ 同步判断调用(服务目录寻址 + 平台签名,3s×3 退避重试)+ 失败挂起/管理端重跑(不配默认出口)+ 可选事件 flow.route.decided
- JOIN scope:branch_key 路径前缀编码 + scope 级到齐放行 + DefValidator SPLIT/JOIN 配对与键长守卫(存量无点号键零迁移,历史直连图回退实例级口径)
- 管理端:/api/flow/admin/router/* CRUD + POST /api/flow/admin/instance/{id}/reroute
- 生产 SQL:sql/20260923_create_flw_cc.sql(含 flw_task 时间列升 DATETIME(3))、20260924_create_flw_router_and_route_log.sql
- 测试:全量 125 绿(FlowEngineIT 24,含条件/嵌套并行/退回重走用例)
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
-- flw_cc 抄送留痕(2026-09-23 二期第一批 NOTIFY 抄送节点)
|
||||
-- 用途:NOTIFY 节点激活时逐接收人落一行(瞬时放行,不建任务、不占待办);
|
||||
-- "抄送我的"页签(idx user_id+sent_time)与办件轨迹/progress 的"抄送"行(idx instance_id)数据源。
|
||||
-- 语义:知会≠办理——接收人离职/映射停用只跳过不阻塞;退回重走再抄送为新增行(只增不改)。
|
||||
-- 附带:flw_task 到达/办理时间升到毫秒精度(秒级分不出"发起→抄送→下一节点激活"亚秒因果序,
|
||||
-- 轨迹交织排序依赖毫秒;存量值秒级补 .000 平滑兼容,展示层截断到秒不变)。
|
||||
-- 本地/测试 ddl-auto=update 会自动建表/改列;生产执行本脚本。
|
||||
CREATE TABLE `flw_cc` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`instance_id` BIGINT NOT NULL COMMENT '归属办件',
|
||||
`sch_id` BIGINT NOT NULL COMMENT '租户键(冗余,列表免 join)',
|
||||
`node_id` VARCHAR(64) NOT NULL COMMENT '定义节点 id',
|
||||
`node_name` VARCHAR(128) NULL COMMENT '节点名快照',
|
||||
`user_id` INT NOT NULL COMMENT '接收人 id',
|
||||
`user_name` VARCHAR(128) NULL COMMENT '接收人姓名快照',
|
||||
`sent_time` DATETIME(3) NOT NULL COMMENT '抄送时间(节点激活时刻,毫秒)',
|
||||
`create_by` VARCHAR(64) NULL,
|
||||
`create_time` DATETIME NULL,
|
||||
`update_by` VARCHAR(64) NULL,
|
||||
`update_time` DATETIME NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_flw_cc_user` (`user_id`, `sent_time`),
|
||||
KEY `idx_flw_cc_inst` (`instance_id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='抄送留痕(NOTIFY 节点逐接收人一行)';
|
||||
|
||||
ALTER TABLE `flw_task`
|
||||
MODIFY COLUMN `arrive_time` DATETIME(3) NOT NULL COMMENT '到达时间(毫秒)',
|
||||
MODIFY COLUMN `handle_time` DATETIME(3) NULL COMMENT '办理时间(毫秒)';
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
-- flw_router / flw_route_log(2026-09-24 二期第二批 CONDITION 条件路由)
|
||||
-- 用途:flw_router=判断服务注册表(CONDITION 节点 routerKey 寻址,发布期校验须已注册启用);
|
||||
-- flw_route_log=决策留痕(一次判断一行,只增不改;outlet=NULL=失败挂起;
|
||||
-- 退回重走/管理端重跑=新行 attempt 递增,轨迹可看多轮判断)。
|
||||
-- 本地/测试 ddl-auto=update 会自动建表;生产执行本脚本。
|
||||
CREATE TABLE `flw_router` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`router_key` VARCHAR(64) NOT NULL COMMENT '注册键(CONDITION 节点 routerKey 引用)',
|
||||
`name` VARCHAR(128) NOT NULL COMMENT '展示名(编辑器下拉)',
|
||||
`service_key` VARCHAR(64) NOT NULL COMMENT '服务目录键(如 notice)',
|
||||
`path` VARCHAR(255) NOT NULL COMMENT '判断端点路径(如 /oapi/notice/flow/route/dept-judge)',
|
||||
`base_path` VARCHAR(64) NULL COMMENT '接收方 context-path(生产 /notice);空=沿用目录条目前缀。签名拼串要剥,漏填必 401',
|
||||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1 启用 / 0 停用',
|
||||
`create_by` VARCHAR(64) NULL,
|
||||
`create_time` DATETIME NULL,
|
||||
`update_by` VARCHAR(64) NULL,
|
||||
`update_time` DATETIME NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_flw_router_key` (`router_key`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='条件路由判断服务注册(全局一行,调用带 schId,校内隔离业务方自理)';
|
||||
|
||||
CREATE TABLE `flw_route_log` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`sch_id` BIGINT NOT NULL COMMENT '租户键(冗余)',
|
||||
`instance_id` BIGINT NOT NULL COMMENT '归属办件',
|
||||
`node_id` VARCHAR(64) NOT NULL COMMENT '定义节点 id(CONDITION)',
|
||||
`node_name` VARCHAR(128) NULL COMMENT '节点名快照',
|
||||
`router_key` VARCHAR(64) NOT NULL COMMENT '判断服务注册键快照',
|
||||
`outlet` VARCHAR(64) NULL COMMENT '命中出口名;NULL=本次调用失败(挂起)',
|
||||
`raw_response` TEXT NULL COMMENT '判断接口原始返回(审计;失败时为错误摘要)',
|
||||
`attempt` INT NOT NULL DEFAULT 1 COMMENT '第几次判断(同 instance+node 递增:退回重走/重跑都 +1)',
|
||||
`decide_time` DATETIME(3) NOT NULL COMMENT '判断完成时刻(毫秒,与 flw_task/flw_cc 同口径)',
|
||||
`create_by` VARCHAR(64) NULL,
|
||||
`create_time` DATETIME NULL,
|
||||
`update_by` VARCHAR(64) NULL,
|
||||
`update_time` DATETIME NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_flw_route_log_inst` (`instance_id`, `node_id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='条件路由决策留痕(一次调用一行,只增不改)';
|
||||
|
||||
-- 初始化注册:notice 发文部门判断(生产执行前先核对 basePath——生产 notice 有 context-path /notice)
|
||||
-- INSERT INTO `flw_router`
|
||||
-- (`router_key`, `name`, `service_key`, `path`, `base_path`, `status`, `create_by`, `create_time`)
|
||||
-- VALUES
|
||||
-- ('notice.dept-judge', '发文部门判断', 'notice', '/oapi/notice/flow/route/dept-judge', '/notice', 1, 'admin', NOW());
|
||||
Reference in New Issue
Block a user