feat(workflow): exec_workflow 增加重试/心跳三列与可恢复查询 DAO

This commit is contained in:
2026-08-25 15:41:50 +08:00
parent b3f4b94b21
commit d5b2d90a27
5 changed files with 203 additions and 0 deletions
+32
View File
@@ -887,3 +887,35 @@ COMMENT ON COLUMN black_deacon_flow_segment_result.segment_index IS '段序号';
COMMENT ON COLUMN black_deacon_flow_segment_result.video_key IS '视频输出字段key';
COMMENT ON COLUMN black_deacon_flow_segment_result.video_url IS '已生成成功的视频地址';
--------------------pgsql创建black_deacon_flow_segment_result表语句---------------------------
--------------------工作流重试兜底:exec_workflow 新增重试/心跳列---------------------
ALTER TABLE black_deacon_exec_workflow ADD COLUMN IF NOT EXISTS retryable SMALLINT NOT NULL DEFAULT 0; -- 1=程序报错可重试,0=用户取消
ALTER TABLE black_deacon_exec_workflow ADD COLUMN IF NOT EXISTS retry_count INTEGER NOT NULL DEFAULT 0; -- 已重试次数
ALTER TABLE black_deacon_exec_workflow ADD COLUMN IF NOT EXISTS last_heartbeat BIGINT NOT NULL DEFAULT 0; -- 最后心跳(毫秒时间戳)
COMMENT ON COLUMN black_deacon_exec_workflow.retryable IS '是否可重试:0-用户取消,1-程序报错';
COMMENT ON COLUMN black_deacon_exec_workflow.retry_count IS '已重试次数';
COMMENT ON COLUMN black_deacon_exec_workflow.last_heartbeat IS '最后心跳时间(毫秒时间戳)';
--------------------工作流重试兜底:flow_async_task 统一异步任务表(Task 2 使用)---------------------
CREATE TABLE IF NOT EXISTS black_deacon_flow_async_task (
-- 基础字段(完全对齐项目规范)
id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at timestamp(6),
-- 业务字段
execution_id BIGINT NOT NULL DEFAULT 0, -- 所属执行ID
node_id VARCHAR(64) NOT NULL DEFAULT '', -- 所属节点ID
segment_index INT NOT NULL DEFAULT -1, -- 段序号;非段调用为-1(哨兵,不用NULL)
model_id BIGINT NOT NULL DEFAULT 0, -- 模型ID
task_id BIGINT NOT NULL DEFAULT 0, -- model-gateway任务ID
msg_topic VARCHAR(255) NOT NULL DEFAULT '', -- 结果消息主题(恢复重订阅拿回结果)
state SMALLINT NOT NULL DEFAULT 0, -- 0=in-flight,1=done,2=failed
result JSONB DEFAULT '{}' -- 成功结果JSON(ModelCallRes)
);
CREATE UNIQUE INDEX IF NOT EXISTS uk_async_task_exec_node_seg ON black_deacon_flow_async_task(execution_id, node_id, segment_index);
CREATE INDEX IF NOT EXISTS idx_async_task_tenant_id ON black_deacon_flow_async_task(tenant_id);
CREATE INDEX IF NOT EXISTS idx_async_task_deleted_at ON black_deacon_flow_async_task(deleted_at);